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

Windows 7 Nullsoft安装程序,Win7,如何安装读/写数据目录?,windows-7,installation,dataset,nsis,read-write,Windows 7,Installation,Dataset,Nsis,Read Write,我们创建了一个安装程序(Nullsoft安装系统v2.46),用于安装应用程序,以及一些(嵌套的)数据目录,其中包括从安装的应用程序读/写访问的(文本)数据文件 WinXP上一切正常:应用程序加载,文件可以从嵌套在安装目录下的数据目录读/写 但是,在Win7/64上安装时,作为安装一部分创建的数据目录是只读的。因此,应用程序加载数据文件,但无法覆盖它们(因为它们位于安装目录下的只读数据目录中) 是的,因为这是Win7-64位,所以数据目录恰好位于: C:\Program Files (x86

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

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

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

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

  C:\Program Files (x86)\MyApp\MyDataDir0
我知道Win7的安装策略比以前的WinOS更严格(出于安全原因)

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

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

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


我们对app install dir下的数据dir的“读/写”兴趣是否与Win7策略相对?(难道我们不应该在那里安装它们吗?

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

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


如果您仍然希望将文件存储在程序文件中,那么您唯一的选择就是在安装过程中编辑数据文件夹的权限。

如果您依赖于写入%ProgramFiles%,那么您的程序在WinNT的每个版本上基本上都已损坏,您只是无法作为非管理员进行测试

如果要允许所有人对文件或文件夹进行写访问,请使用。这样做会让你失去一点安全感。为了降低风险,请确保数据文件存储在子目录中(
%ProgramFiles%\MyApp\data
或类似目录),并且不要授予普通用户对具有.exe或.dll的文件夹的写访问权限


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

感谢您建议安装到
%ProgramFiles%
并复制到
%AppData%
——我们讨论并决定这样做。(现在程序在XP和Win7上查找文件的方式有所不同,这有点奇怪,但我想这就是生活…)