如何在C#中写入Program Files(x86)?

How to write to Program Files (x86) in C#?

提问人:Tim 提问时间:9/8/2016 更新时间:9/8/2016 访问量:1391

问:

我正在开发的应用程序的一个要求是能够为外部程序安装插件。安装插件包括将 dll 放入 plugins 目录。问题是 plugins 目录位于 Program Files (x86) 中的文件夹中。尝试通过 File.WriteAllBytes 写入它时,我遇到了 UnauthorizedAccessException。

  • 即使程序以管理员身份运行,也会发生此错误。
  • 我尝试将我的清单修改为级别 requireAdministrator。
  • 我还尝试使用 runas 生成一个新进程。

如何将我的 dll 放入 Program Files (x86) 中的文件夹中?

c#

评论

0赞 DVJex 9/8/2016
可能是 UAC 问题。
0赞 Tim 9/8/2016
即使在接受 UAC 提示后,FileWriteBytes 仍会继续引发 UnauthorizedAccessException。

答:

1赞 Shannon Holsinger 9/8/2016 #1

尝试添加

[PermissionSet(SecurityAction.Demand, Name="FullTrust")]

在涉及 IO 活动的方法之上。F/E,以下将“myFile”复制到程序文件目录:

[PermissionSet(SecurityAction.Demand, Name="FullTrust")]
public void copyFile(string myFile){
    System.IO.File.Copy(myFile,Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles);
}
0赞 Reza Akraminejad 9/8/2016 #2

我认为您用于登录 Windows 并开始编程的登录帐户不是真正的管理员帐户。

尝试检查帐户权限,并以管理员模式运行 Visual Studio,然后 查看是否可以在调试模式下编写。

检查它并给出结果。

0赞 Tim 9/8/2016 #3

我很傻。我在要写入的 Program Files 中指定了目录,但没有在路径中包含文件名。UnauthorizedAccessException 让我失望了。