【发布时间】:2010-10-15 19:50:57
【问题描述】:
我想在 Windows 7 下的通用应用程序数据中为我的软件存储一些文件并对其进行编辑。
我不知道为什么 Windows 7 不允许我的软件更改文件 除非我以管理员身份运行它们。
我可以在哪里存储我的文件,这样就不需要管理员权限?
【问题讨论】:
-
@Henk : CommonApplicationData
我想在 Windows 7 下的通用应用程序数据中为我的软件存储一些文件并对其进行编辑。
我不知道为什么 Windows 7 不允许我的软件更改文件 除非我以管理员身份运行它们。
我可以在哪里存储我的文件,这样就不需要管理员权限?
【问题讨论】:
您应该将应用程序数据存储在 Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); 下的子文件夹中。请注意,此文件夹是特定于用户的。
非管理员用户无权写入CommonApplicationData 文件夹,因为该文件夹不属于特定用户。
请注意,您还可以使用设置类来存储您的设置。为此,将新项目添加到您的项目中,选择“设置文件”。这适用于字符串和数字等基本设置。
【讨论】:
某些文件夹从 Windows 7 开始受到限制,除非您正在安装、卸载或修补,否则不应触摸这些文件夹。请参阅my answer that you accepted from earlier today 是完全相同的情况。
如果您有多个应用程序需要编辑相同的文件,则应将它们存储在
Environment.GetFolderPath( Environment.SpecialFolder.CommonApplicationData)
System.Environment.SpecialFolder.CommonProgramFiles(我认为您正在尝试写入的文件夹)是只读的,除非您被提升。
从 MSDN 中阅读 this article,它解释了您应该在哪里保存数据以及如何正确使用各种文件夹。我的解决方案是他列表中的第一个,总结一下:
您需要在 CommonApplicationData 文件夹中安装程序时创建一个文件夹,然后设置该新文件夹的权限,以便它具有来自用户组的写入权限。
【讨论】:
由于用户访问控制,您需要使用提升来修改这些文件。查看这篇 MSDN 文章了解更多详情:MSDN article about UAC
如果您不确定如何在 C# 中执行此操作,这里有一篇文章:Article about requesting elevation in C#
【讨论】:
这是 Windows 7 中默认打开的安全选项,即 UAC(用户帐户控制)。您应该更改您的设计(在其他地方写)或从控制面板\用户帐户中关闭 UAC。
【讨论】:
我也遇到过同样的问题,但是使用 Inno Setup Installer,我有一个名为“Permissions”的参数,我在其中设置了值“users-full”,以便在我的应用程序文件夹中创建一个文件到常见的应用程序数据中完全控制该文件的所有用户。
【讨论】: