我正在开发一个将其设置保存在安装文件夹中的应用程序。如果我在驱动器C:上的Program Files中安装应用程序并尝试编写设置文件,我会得到一个例外,就是这样。
我知道用户帐户控制(UAC)migth是不允许我的应用修改文件内容的那个。
我需要帮助解决以下问题:
更通用的问题是:
如何创建一个C#程序,将其安装到Windows Vista下的C:\ Program Files \ MyProgram后,可以在安装目录中操作(创建/编辑/删除).ini文件?所有用户都应该使用此文件。
答案 0 :(得分:9)
为什么不将设置存储在用户特定的位置,例如C:\Users\Username\AppData
?
这样,不同的用户可以在同一台机器上拥有不同的设置。此外,这是设置等的推荐位置。
答案 1 :(得分:5)
根据Ben S的回答,查看Environment.GetFolderPath方法。
此方法允许您抽象出特定位置,而只是使用已知的SpecialFolder路径(即SpecialFolder.ApplicationData)。
答案 2 :(得分:2)
您获得异常的事实意味着您的程序以某种方式识别Vista / 7。我不完全确定什么设置(在C#项目中)会触发它。但是,如果你可以让你的应用程序'假装'它是一个XP应用程序,Vista将让它写入位于其他地方的影子文件。
但所有用户共享可写路径的正确方法是:
string path = Environment.GetFolderPath(
Environment.SpecialFolder.CommonApplicationData);
答案 3 :(得分:1)
我很惊讶它尚未被提及,但一个可行的C#选项是抛弃INI文件(yuck)并拥抱Settings facilities provided by .Net。它们在所有Windows版本中都能很好地工作,它们直接由Visual Studio支持,最后它们在用户和机器级别都可以覆盖。
我们没有真正的问题可以谈论利用此功能(包括XCopy部署,已安装的应用程序,Citrix等)。
答案 4 :(得分:1)
根据Ben S和akmad的答案,您应该将ini文件放在appDataFolder中。
如果您希望设置对每个用户都是唯一的,请为每个用户创建一个ini文件并将其放在AppData文件夹中,该文件夹可以使用以下代码检索:
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)
如果您希望设置对所有用户都是通用的,但是普通AppData文件夹中的ini文件。
Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData)