【问题标题】:Where to Store writable data to be shared by all users in a vista installer?在 vista 安装程序中将所有用户共享的可写数据存储在哪里?
【发布时间】:2008-09-22 10:42:26
【问题描述】:

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

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

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

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

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

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

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

还有其他选择吗?

【问题讨论】:

    标签: windows-vista installation nsis acl


    【解决方案1】:

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

    更多详情请见http://www.deez.info/sengelha/2006/02/28/windows-vista-changes/

    【讨论】:

    • 实际上正确的解决方案是在你设置SetShellVarContext all之后在NSIS中使用$APPDATA。
    • 除此之外,您还必须在创建目录时修改ACL,因为默认情况下只有Users 组才能读取。
    • @Sorin 但是如何在 NSIS 中设置 ACL?
    • 您的链接已失效
    【解决方案2】:

    “所有用户”配置文件下的某处将是明显的位置。我认为默认情况下谁可以读/写有一些规则,但是如果您需要不同的东西来创建子目录并在安装程序中设置 ACL,MS 文档建议您这样做。

    【讨论】:

      【解决方案3】:

      【讨论】:

        【解决方案4】:

        我会特别使用:

        SetShellVarContext all
        SetOutPath $APPDATA
        File "MyInsecurelySharedFile.txt"
        

        请参阅NSIS Scripting Reference 了解更多信息。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-01-21
          • 1970-01-01
          • 2018-05-07
          • 2011-09-01
          • 1970-01-01
          • 1970-01-01
          • 2010-10-19
          相关资源
          最近更新 更多