设置requireAdministrator后仍无法写入Program Files的问题
.NET 8 WPF安装程序写入Program Files时遭遇权限拒绝问题
问题描述
正在为部署的应用开发自定义.NET 8 WPF安装程序,应用本身运行无需管理员权限,但安装程序需要向Program Files目录写入文件。按照技术文章的指引,已在项目的app.manifest文件中设置<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />,但执行文件写入操作时仍收到“Access Denied”错误。
安装程序写入代码
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); }
测试验证
为排查问题,创建了一个简单的控制台应用,尝试从Program Files目录内读取文件并复制到同目录(重命名),代码如下:
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!");
该测试程序运行完全正常,未出现权限问题。
疑问点
注意到与示例文章的差异:所有示例都是将现有文件从其他位置复制到Program Files,而我是通过FileStream将嵌入资源中的文件写入受保护文件夹,不确定这是否是导致权限错误的原因。
内容的提问来源于stack exchange,提问作者Artur S.
相关产品推荐
相关产品推荐

