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