我正在使用inno setup为我的应用程序创建一个安装包,我的应用程序是由C#+ .Net 2.0 + VSTS 2008编写的.Inno setup => http://www.jrsoftware.org/isinfo.php我在Program Files / Foo文件夹下安装我的应用程序(Foo是我的应用程序名称)。我的应用程序针对的是Windows Vista。
我发现的问题是我的程序无法写入Program Files / Foo文件夹。我需要写入此文件夹的权限才能保存一些配置文件。我注意到的奇怪之处是Program Files / Foo文件夹被标记为只读,我检查了Program Files下的所有文件夹都标有只读,例如Office。
我的问题是,
答案 0 :(得分:14)
您应该使用special folders enum和Enivronment.GetFolderPath将用户特定的配置数据写入当前用户的Application Data文件夹。
答案 1 :(得分:12)
最佳实践是不将配置数据存储在Program Files文件夹中。而是将应用程序的数据存储在%AppData%\ YourApplicationName中。根据您是要按用户存储配置数据还是存储在共享公用文件夹中,请使用以下枚举之一来获取文件夹路径:
string userAppData = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
string commonAppData = Envrionment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData);
默认情况下,Vista用户不以管理员身份运行程序,因此这些程序对“程序文件”下的文件夹具有仅读取权限。用户可以通过禁用UAC来更改此行为,并且可以要求您的用户执行此操作,但在办公室设置中,用户可能没有该选项。这就是你使用AppData的原因 - 应用程序总是可以读取和将数据写入AppData文件夹。
有关UAC的信息,请访问Microsoft网站。虽然这个页面相当长,但它是理解UAC的起点: http://msdn.microsoft.com/en-us/library/bb530410.aspx
答案 2 :(得分:6)
常见的解决方案是将配置文件安装到Application Data文件夹,如下所示:
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)