windows 7 - Nullsoft安装程序,Win7,如何安装读/写数据目录



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

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

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

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

  C:Program Files (x86)MyAppMyDataDir0

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

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

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

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

我们对data-dirs-under-app-install-dir的"读/写"兴趣是否违反Win7策略?

如果你依赖于写%ProgramFiles%,你的程序基本上在每个版本的WinNT上都是坏的,你只是没有作为非管理员进行测试!

如果你想允许每个人对文件或文件夹进行写访问,使用access Control插件。这样做会失去一些安全保障。为了降低风险,请确保数据文件存储在子目录(%ProgramFiles%MyAppData或类似的东西)中,并且不要授予普通用户对带有。exe或。dll的文件夹的写访问权限。

你真正应该做的是在你的程序第一次运行时,把%ProgramFiles%的文件复制到%AppData%,这样每个用户都有自己的设置,没有安全问题。

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

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

如果你仍然想将文件存储在Program files中,那么你唯一的选择就是在安装时编辑data文件夹的权限

最新更新