vista安装程序中将所有用户共享的可写数据存储在哪里?

时间:2020-03-06 14:32:01  来源:igfitidea点击:

我的应用是通过NSIS安装的。

我希望安装程序为所有用户安装该程序。

我可以通过安装到"程序文件"目录来做到这一点。

有一个数据库文件(firebird),系统上的所有用户帐户应共享。

如果我将此数据库文件存储在"程序文件"目录中,则它将是只读的。

如果我将其存储在用户的APPDATA目录中,则每个用户都有一个不同的副本,当一个用户添加数据时,其他用户将看不到它。

选项1在我的应用程序目录中的"程序文件"下,创建一个"数据"目录,在我的安装程序中,此目录所有人均可读取,这样用户"程序文件"虚拟化将不会启动,并且所有用户都可以更新文件并查看彼此的更改。

还有其他选择吗?

解决方案

在"所有用户"配置文件下的某个位置将是显而易见的位置。我认为默认情况下有一些有关谁可以读取/写入的规则,但是MS文档建议我们是否需要其他方法来创建子目录并在安装程序中正确设置ACL。

所有用户的数据应存储在%ALLUSERSPROFILE%中,或者使用参数CSIDL_COMMON_APPDATA调用SHGetFolderPath()以获取所有用户的存储区域。

有关更多详细信息,请参见http://www.deez.info/sengelha/2006/02/28/windows-vista-changes/。

这是一个安全漏洞,请参阅:http://blogs.msdn.com/oldnewthing/archive/2004/11/22/267890.aspx

具体来说,我将使用:

SetShellVarContext all
SetOutPath $APPDATA
File "MyInsecurelySharedFile.txt"

有关更多信息,请参见《 NSIS脚本参考》。