检查用户是否具有“程序文件”中的写入权限

时间:2010-07-01 11:52:09

标签: c# windows permissions file-permissions

我需要检查当前用户是否在Program Files文件夹中具有写权限 主要问题发生在Vista / 7中 - 如果我只是尝试在此位置创建临时文件,我会得到一个异常,即使用户可以使用Windows资源管理器执行此类操作(允许UAC提升后)。听起来很合理,因为流程本身并没有以管理员权限运行 然后我尝试使用this解决方案,但我总是回到“真实”,即使我尝试使用标准(非管理员)用户运行它。

我最终希望能够回答的是,如果用户尝试在Program Files内创建目录,他是否需要提供管理员凭据,或者只需单击“继续” UAC是否足够?
我正在寻找一种方法来回答这个问题,而不是自己提出UAC弹出窗口(任何类型)。有没有相对简单的方法呢?

更新

感谢您提供我使用UserData文件夹,但我只需要知道用户是否在该文件夹中具有写入权限,以便我可以决定是否应该尝试执行自动更新(运行msi)或不。

3 个答案:

答案 0 :(得分:6)

更好的解决方案是将应用程序数据存储在您应该的位置:

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);

答案 1 :(得分:3)

坚持规则会更好。请注意,并非所有用户都可以通过UAC提升。而且你可以试着写它并且mays似乎成功但是Vista / Win7'虚拟化'你的写作在其他地方。

由于您标记了此C#和Windows,请查看

string dataPath = 
   Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);

答案 2 :(得分:0)

如果没有用户同意,ProgramFiles位置不允许写访问,这是有充分理由的。你必须要么

  1. 始终提升您的应用程序(每次启动时都要求用户同意)或
  2. 使用服务进行自动更新
  3. 将更新下载到用户的临时文件夹,然后以提升
  4. 运行更新

    选项1和2有严重的缺点,所以我建议选择选项3.这种方式也可以被其他应用程序使用(例如FireFox)。