2

我正在开发一个将其设置保存在安装文件夹中的应用程序。如果我将应用程序安装在驱动器 C: 上的 Program Files 中并尝试写入设置文件,则会出现异常,仅此而已。

我知道用户帐户控制 (UAC) 可能是不让我的应用修改文件内容的那个。

我需要有关以下问题的帮助:

  • 以至少应显示 UAC 警告的方式进行文件编辑,如果我回答是,则文件变为可写
  • 如果无法编辑驱动器 C 上的文件:我需要一种方法来存储数据

一个更通用的问题是:

如何创建一个C#程序,在Windows Vista下安装到C:\Program Files\MyProgram后可以操作(创建/编辑/删除)安装目录下的.ini文件?该文件应该对所有用户都相同。

4

5 回答 5

9

为什么不将设置存储在用户特定的位置,例如C:\Users\Username\AppData

这样不同的用户可以在同一台机器上进行不同的设置。此外,这是设置等的推荐位置。

于 2009-11-09T21:48:22.250 回答
5

基于 Ben S 的回答,查看Environment.GetFolderPath方法。

此方法允许您抽象出特定位置,而只使用已知的SpecialFolder路径(即 SpecialFolder.ApplicationData)。

于 2009-11-09T21:52:58.710 回答
2

您遇到异常的事实意味着您的程序以某种方式支持 Vista/7。我不完全确定什么设置(在 C# 项目中)会触发它。但是,如果您可以让您的应用程序“假装”它是一个 XP 应用程序,Vista 将让它写入位于其他位置的影子文件。

但是获得所有用户 共享的可写路径的正确方法 :

string path = Environment.GetFolderPath(
    Environment.SpecialFolder.CommonApplicationData);
于 2009-11-09T22:13:47.400 回答
1

我很惊讶它还没有被提及,但一个可行的 C# 选项是放弃 INI 文件(糟糕)并采用.Net 提供的设置工具。它们在所有 Windows 版本中都能很好地工作,它们受到 Visual Studio 的直接支持,最后它们在用户和机器级别都是可覆盖的。

使用此功能(这包括 XCopy 部署、已安装的应用程序、Citrix 等)我们没有真正的问题可言。

于 2009-11-09T22:28:36.100 回答
1

基于 Ben S 和 akmad 的答案,您应该将 ini 文件放在 appDataFolder 中。

如果您希望设置对每个用户都是唯一的,请为每个用户创建一个 ini 文件并将其放在他们的 AppData 文件夹中,可以使用以下代码检索该文件夹:

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)

如果您希望设置对所有用户通用,但通用 AppData 文件夹中的 ini 文件。

Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData)
于 2009-12-11T03:13:00.407 回答