2

我们创建了一个安装程序(Nullsoft Install System v2.46)来安装应用程序,以及一些(嵌套的)数据目录,其中包括从已安装的应用程序读取/写入访问的(文本)数据文件。

在 WinXP 上一切正常:应用程序加载,并且可以从嵌套在安装目录下的数据目录读取/写入文件。

但是,在 Win7/64 上安装时,作为安装一部分创建的数据目录是只读的。因此,应用程序加载数据文件,但无法覆盖它们(因为它们位于安装目录下的只读数据目录中)。

是的,因为这是 Win7-64 位,数据目录恰好位于:

  C:\Program Files (x86)\MyApp\MyDataDir0

我了解 Win7 的安装策略比以前的 WinOS 更严格(出于安全原因)。

问题:在安装过程中,我们应该使用什么机制来确保这些数据目录是读/写的,并且其中的(文本)数据文件也是读/写的?

这些数据文件不是用户特定的,它们暗示程序运行所需的数据。(没有它们,程序就毫无用处。)从逻辑上讲,它们是“程序系统”文件,尽管我们可以合理化它们代表程序使用的“可扩展数据集”(因此它们必须是读/写的)。

为了简单和一致,我们真的宁愿用安装程序解决这个问题,而不是从程序中更改目录/文件权限。我们希望这些数据存在于安装应用程序的位置,而不是某些C:/Users/Default/. 或C:/ProgramData/MyApp/.目录。

我们对 data-dirs-under-app-install-dir 的“读/写”兴趣是否违反 Win7 策略?(我们不应该在那里安装它们吗?)

4

2 回答 2

2

如果您依赖于写入 %ProgramFiles%,那么您的程序基本上在每个 WinNT 版本上都被破坏了,您只是以非管理员身份测试失败!

如果您想允许每个人对文件或文件夹进行写访问,请使用访问控制插件。通过这样做,您放弃了一点安全性。为降低风险,请确保数据文件存储在子目录(%ProgramFiles%\MyApp\Data或类似目录)中,并且不要授予普通用户对带有 .exe 或 .dll 的文件夹的写入权限。

您真正应该做的是在程序首次运行时将文件从 %ProgramFiles% 复制到 %AppData%,这样每个用户都可以获得自己的设置,并且没有安全问题。

于 2011-07-16T00:30:14.417 回答
1

实际上,您的应用程序无法在用户不是管理员的 Windows XP 下运行。Windows 7/Vista 中Program Files 目录的默认权限与Windows XP 相同。

根据您的描述,这些文件不是程序文件,而是程序数据文件,因此最好将它们存储在ProgramData目录中。要检索其位置,请使用as 参数调用SHGetFolderPath函数。CSIDL_COMMON_APPDATA但是,即使在这种情况下,您也可能需要编辑您的应用文件夹权限以允许任何用户写入。

如果您仍想将文件存储在 Program Files 中,那么您唯一的选择是在安装期间编辑数据文件夹的权限。

于 2011-07-15T17:59:07.873 回答