Редактирование файлов в 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"); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д