在“程序文件”文件夹中文件的写权限问题(file write permission issue un

2019-06-17 17:16发布

我使用Inno Setup的制作安装包我的申请,我的应用程序是由C#编写+ NET 2.0 + VSTS 2008 Inno Setup的=> http://www.jrsoftware.org/isinfo.php我安装我的在Program Files /美孚文件夹应用程序(foo是我的应用程序的名称)。 我的应用程序的目标是到Windows Vista。

我发现这个问题是我的程序不能写入文件夹Program Files文件/美孚。 我需要为了节省一些配置文件写入到这个文件夹的权限。 我注意到奇怪的是程序文件/美孚被标记为只读文件夹,我已经检查Program Files下的所有文件夹都标有只读,如Office。

我的问题是,

  1. 为什么所有文件夹都标记为只在Program Files文件阅读? 这意味着我们不应该写在Program Files个别应用程序文件夹? 如果没有,我们应该在哪里写信息,如用户的磁盘最后选择的单个应用程序的配置信息?
  2. 如果我们能在Program Files写入单个应用程序文件夹,该如何解决? 我不希望我的应用程序,以管理员身份运行来解决这个问题,如果有解决办法写入该文件夹,我想如果可能的话需要最少的许可。

Answer 1:

你应该写用户特定的配置数据的Application Data文件夹为当前用户,使用特殊文件夹枚举和Enivronment.GetFolderPath 。



Answer 2:

最好的做法是不配置数据存储在Program Files文件夹。 取而代之的是,存储在%APPDATA%\ YourApplicationName您的应用程序的数据。 根据您是否希望存储配置数据每用户或共享文件夹共同使用以下枚举一个获得该文件夹的路径:

string userAppData = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);  
string commonAppData = Envrionment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData); 

默认情况下,Vista的用户不要运行程序作为管理员,因此这些程序具有只读到下“程序文件”的文件夹的访问 。 用户可以通过禁用UAC改变这种行为,你可以问你的用户这样做,但在办公环境中的用户可能不会有这样的选择。 这就是为什么你使用应用程序数据代替-应用程序可以随时读取写入数据到AppData文件夹。

关于UAC的信息可以在微软的网站上找到。 虽然这个页面是相当长的,它是理解UAC起点: http://msdn.microsoft.com/en-us/library/bb530410.aspx



Answer 3:

一个常见的解决方案是配置文件安装到Application Data文件夹,即像如下:

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)


文章来源: file write permission issue under “Program Files” folder