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

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

我最终希望能够回答的是,如果用户试图在Program Files创build一个目录,他是否需要提供pipe理员证书,或者只需点击UAC中的“继续”即可?
我正在寻找一种方法来回答这个问题,而不用提高UACpopup式(任何types)我自己。 有一个相关的简单的方法来做到这一点?

UPDATE

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

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

 Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); 

遵守规则会更好。 请注意,并非所有用户都可以通过UAC升级。 你可以尝试写,它似乎成功,但随着Vista / Win7虚拟化“你的写在别的地方。

既然你标记了这个C#和Windows,看看

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

没有用户的同意,ProgramFiles的位置不允许写入权限有很好的理由。 你也不得不这样做

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

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