Редактирование файлов в System32 - файл фактически не появляется, но программа его определяет - C#
Формулировка задачи:
Здравствуйте,
Пытаюсь написать программу, которая бы меняла расширение файла в папке System32 с C_1252.NLS на C_1252.bak (или вовсе удаляла этот файл), а затем создавала бы копию другого файла C_1251.NLS с названием C_1252.NLS.
Собственно, проблема в том, что при попытке сменить расширение файла, этот файл не находится вообще(Необработанное исключение типа "System.IO.FileNotFoundException" в mscorlib.dll
Дополнительные сведения: Файл 'C:\Windows\System32\C_1252.NLS' не найден.), хотя он точно есть в системе.
При попытке скопировать любой другой файл в этой папке не происходит ничего, однако если открыть папку через OpenFileDialog, мы видим, что файл создался (где-то?), и если попытаться скомпилировать код еще раз, будет выдана ошибка, что файл ***copy.nls уже существует, хотя в проводнике его все еще нет. (см. скриншоты)
Вопрос : Возможна ли в принципе реализация подобной программы? И почему невозможно создать копию файла и переименовать его посредством кода, а вручную вполне себе получается?
namespace reg
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public static void AddFileSecurity(string fileName, string account,
FileSystemRights rights, AccessControlType controlType)
{
FileSecurity fSecurity = File.GetAccessControl(fileName);
fSecurity.AddAccessRule(new FileSystemAccessRule(account,
rights, controlType));
File.SetAccessControl(fileName, fSecurity);
}
private void button2_Click(object sender, EventArgs e)
{
string foldertrue1 = "C:\\Windows\\System32\\C_1251.NLS";
string foldertrue2 = "C:\\Windows\\System32\\C_1252.NLS";
string filePath1 = "";
string filePath2 = "";
using (new ProcessPrivileges.PrivilegeEnabler(Process.GetCurrentProcess(), Privilege.TakeOwnership))
{
//для папки
string mainpath = ("C:\\Windows\\System32");
var di = new DirectoryInfo(mainpath);
var ds = di.GetAccessControl();
ds.SetOwner(WindowsIdentity.GetCurrent().User);
Directory.SetAccessControl(mainpath, ds);
//для файлов
string path = ("C:\\Windows\\System32\\C_1251.NLS");
string path2 = ("C:\\Windows\\System32\\C_1251copy.NLS");
string pathtodelete = ("C:\\Windows\\System32\\C_1252.NLS");
string pathback = ("C:\\Windows\\System32\\C_1252-backup.bak");
var fi = new FileInfo(path);
var fs = fi.GetAccessControl();
string User = Environment.UserName;
fs.SetOwner(WindowsIdentity.GetCurrent().User);
File.SetAccessControl(path, fs);
AddFileSecurity(path, User, FileSystemRights.FullControl, AccessControlType.Allow);
File.Copy(path, path2);
}Решение задачи: «Редактирование файлов в System32 - файл фактически не появляется, но программа его определяет»
textual
Листинг программы
private void button2_Click(object sender, EventArgs e)
{
File.Copy(@"C:\Windows\System32\C_1251.NLS", @"C:\Windows\System32\C_1251copy.NLS");
}