You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

设置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.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 16:28:11