【问题标题】:UAC problems while creating directories and text files in Windows 7在 Windows 7 中创建目录和文本文件时出现 UAC 问题
【发布时间】:2011-12-30 13:33:21
【问题描述】:

我有一个需要创建文本日志的程序。在 XP 中,一切正常,但是当我在 Windows 7 上对其进行测试时——后来又为我的开发计算机升级到 Windows 7——我收到一个错误,“访问路径 'C:\Program Files (x86)\Ludlum Measurements, Inc\LMI Universal Software\UniversalLog\' 被拒绝”。如果我让安装程序创建文件夹然后尝试在文件夹中创建文本文件,我会收到类似的错误。

我知道这与权限有关,但是我应该授予什么权限以及如何授予权限?

使用日志功能的程序?

日志进入的文件夹?

程序所在的文件夹?

以及此修复程序如何在 XP、Vista、Server 2005 和 Server 2008 下以及作为服务工作(程序的一部分作为 Windows 窗体运行,部分作为服务运行) ?

-编辑- 已添加重点。

重申一下:在 XP 上安装和运行时,它将如何工作?服务器2003?服务器2008?这会给他们带来什么问题吗?

还有一个新问题:我的程序可以访问 ApplicationData 文件中的文件吗?我只记得整个问题源于我试图创建一个包含 SQL 数据库连接信息的配置文件。把头撞在砖墙上一天往往会让你忘记你为什么开始这样做。同样,这最初适用于 XP、Server 2005 和 Server 2008。

【问题讨论】:

    标签: c# windows-7 uac


    【解决方案1】:

    您应该使用 Environment.GetFolderPath 并选择一个在 UAC 开启时具有写入权限的 Environment.SpecialFolder 文件夹并将您的日志文件写入那里。

    默认情况下,在 UAC 下,您无权写入 C:\Program Files 或其子文件夹。

    Environment.ApplicationData 通常是一个不错的选择,默认情况下它在 XP、Vista、Server 2005 和 Server 2008 上是可写的,除非管理员锁定太多东西

    Teach Your Apps To Play Nicely With Windows Vista User Account Control 是关于如何编写在 UAC 下表现良好的应用程序的好资源

    【讨论】:

    • 你回答了我的问题,但我不确定当我在没有人登录的情况下运行程序的服务部分时会发生什么。看起来我只需要掷骰子然后试试看。
    【解决方案2】:

    您不应该在安装后向 Program Files 目录写入任何内容,除非您实际上正在修补您的应用程序。文件的日常使用应进入应用程序数据文件夹(LocalApplicationData 用于非漫游数据,ApplicationData 用于漫游数据)。

    string path = Environment.GetFolderPath(
        EnvironmentFolders.SpecialFolders.LocalApplicationData)
    

    http://msdn.microsoft.com/en-us/library/system.environment.specialfolder.aspx

    【讨论】:

      猜你喜欢
      • 2011-01-15
      • 1970-01-01
      • 2020-07-06
      • 1970-01-01
      • 2021-04-09
      • 1970-01-01
      • 1970-01-01
      • 2018-09-03
      • 2012-05-25
      相关资源
      最近更新 更多