【发布时间】:2011-05-09 04:51:39
【问题描述】:
我有一个 C# 应用程序,我需要在操作期间将一些输出转储到日志文件。我想让用户选择在哪里找到日志文件,但根据客户端请求,它需要默认为当前应用程序位置,通常是 /Program Files/。
但是,当我在 Win7/Vista 机器上部署我的应用程序时,除非我以管理员身份运行该程序,否则该应用程序不会写入日志文件。同时,它似乎在默默地处理无法写入文件的情况,因为我目前正在处理文件创建和写入过程中抛出的所有异常。
我目前正在尝试检测两者都没有写权限:
A) 通过调用“Directory.GetAccessControl()”和
创建一个 DirectorySecurity 对象B) 使用“SecurityManager.IsGranted(permissions)”方法检查安全权限,
但是 A 并没有在我期望的时候抛出异常,并且 B 每次都返回 true。
我看过很多与这个主题相关的帖子,但他们都给出了只写到 Application.UserAppDataFolder 或它的一些变体的解决方案。我的客户特别要求默认为当前的应用程序路径,因此我至少需要找到一种方法来在写入日志文件将静默失败时优雅地警告他们。
注意:我当前的代码可以在 Windows XP 上找到(因为没有 UAC,我假设)。基本上我只需要知道为什么我所有的电话都告诉我写文件很好,除非我以管理员身份运行,否则根本不会创建文件。
谢谢!
【问题讨论】:
-
如果您希望您的应用程序安装在 Program Files 下,您应该真正尝试说服您的客户,在其中写入日志文件是一个非常糟糕的主意。它们确实属于 %AppData%。当然,除非您打算从其他任何地方的文件夹(例如 USB 驱动器)运行您的应用
-
抱歉投反对票;我昨天胖了,现在改不了了。
标签: c# file permissions uac