允许访问权限在Windows 7的Program Files中写入

dev*_*ull 52 c#

在可执行文件所在的安装目录中写入临时文件时,我的应用程序抛出"拒绝访问"错误.但是它在Windows XP中运行得非常好.如何在Windows 7中提供对Program Files目录的访问权限?

编辑:如何让程序要求用户提升权利?(即运行具有完全管理员权限的程序)

Ger*_*ies 88

您的程序不应将临时文件(或其他任何内容)写入程序目录.任何程序都应将%TEMP%用于临时文件,将%APPDATA%用于特定于用户的应用程序数据.从Windows 2000/XP开始就是如此,所以你应该改变你的应用程序.

问题不是Windows 7.

你可以要求appdata文件夹路径:

string dir = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
Run Code Online (Sandbox Code Playgroud)

或者用于TEMP路径

string dir = Path.GetTempPath()
Run Code Online (Sandbox Code Playgroud)

  • 他的任务是"如何提供访问权限".你的回答是有害的,"不要".然而,它没有回答他原来的问题. (9认同)
  • 这个答案的问题在于它根本不是答案,Windows是否知道"向后兼容性"的含义?如果你创建了一个在Windows XP上运行良好的应用程序,它为什么会崩溃甚至需要在新系统上运行任何其他特定的新权限,那么在你的应用程序中考虑"可能"以便MS决定它们是疯狂的现在将限制X o Y,您的应用程序依赖于此.相反,MS应该说"好吧,你的程序文件会像它一样工作,但这里是NewProgramFiles文件夹,它会帮助你,等等等等等等". (8认同)
  • 100%正确!更多信息:http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/77aaf6e1-8de5-4529-9b26-fa89b55fcc49 (4认同)

Jos*_*eph 27

您的程序必须使用管理权限运行.您无法使用代码自动执行此操作,但您可以请求用户(在代码中)在程序运行时提升程序的权限.有关如何做到这一点的维基.或者,通过右键单击其图标并单击"以管理员身份运行",可以以管理员身份运行任何程序.

但是,我不建议这样做.最好使用这样的东西:

Environment.GetFolderPath(SpecialFolder.ApplicationData);
Run Code Online (Sandbox Code Playgroud)

获取AppData文件夹路径并为您的应用程序创建一个文件夹.然后将临时文件放在那里.


cra*_*str 11

我能想到的选择:

  • 以完整的admin priv运行整个应用程序.使用UAC
  • 仅对需要访问的内容运行子进程作为完全管理员
  • 在别处写临时文件


tai*_*990 7

在项目中添加新项目:Application Manifest并保存.

现在打开这个文件并查找<requestExecutionLevel>.它必须设置为asInvoker.

将其更改为highestAvailable.现在,在执行您的应用程序时,将出现一个要求许可的提示.点击yes!

多数民众赞成:)现在您可以从system32或任何其他需要管理员权限的文件中进行编写和读取

您可以通过sigcheck验证您的申请.

sigcheck.exe -m yourapp.exe
Run Code Online (Sandbox Code Playgroud)

并在输出检查元素requestedExecutionLevel.