Согласно множеству сообщений, которые я нашел в SO, а также CodeProject, я должен иметь возможность получить доступ к защищенной папке, установив в файле app.manifest моего проекта.Я так и сделал, но при попытке создать там файлы получаю ошибку «Доступ запрещен». Для справки, это код, который я запускаю:
Код: Выделить всё
var embeddedFiles = Assembly.GetExecutingAssembly().GetManifestResourceNames();
foreach (string embeddedFile in embeddedFiles)
{
using var fileStream = new FileStream(
Path.Combine(InstallationDirectory,
embeddedFile.Split($"{projectName}.InstallFiles.")[0]), FileMode.Create,
FileAccess.Write);
using var file = Assembly.GetExecutingAssembly()
.GetManifestResourceStream(embeddedFile);
await file.CopyToAsync(fileStream);
}
Я также нашел кое-что интересное. Я создал простое консольное приложение, которое обращается к файлу из папки внутри ProgramFiles и копирует его в ту же папку с другим именем:
Код: Выделить всё
Console.WriteLine("I'll try to duplicate a file now...");
try
{
var embeddedFiles = Assembly.GetExecutingAssembly().GetManifestResourceNames();
using var fileStream = new FileStream(@"C:\Program Files\OpenMPT\License.txt", FileMode.Create,
FileAccess.Write);
using var file = Assembly.GetExecutingAssembly().GetManifestResourceStream(embeddedFiles[0]);
await file.CopyToAsync(fileStream);
}
catch (Exception e)
{
Console.WriteLine(e);
Console.WriteLine("Alas, I couldn't do it...");
return;
}
Console.WriteLine("Egad! I did it!");
¹ На данный момент я нашел следующее:
- C# не может получить доступ к системным файлам даже с правами администратора
- https://www.codeproject.com/Questions/798662/How -can-I-write-to-program-files-x-folder
- Необходим доступ к папке «Program Files»
- Доступ к папке Program Files из группы пользователей с использованием кода .NET
Подробнее здесь: https://stackoverflow.com/questions/784 ... inistrator
Мобильная версия