使用NSIS将应用程序文件安装到标准Windows用户

时间:2015-07-26 20:51:10

标签: windows installation nsis

我有一个需要SQLite DB才能运行的应用程序。在我的NSIS脚本中,数据库被复制到用户Local / AppData文件夹。如果安装程序的用户是管理员用户,则此工作正常。

但是,如果标准用户尝试安装程序,安装程序会要求输入管理员密码(因为标准用户无法在Windows上安装程序)并且用户正在安装,现在正在切换到管理员,导致数据库安装在管理员Local / AppData文件夹而不是实际用户AppData文件夹中。

因此,实际上,当标准用户尝试运行程序时,它找不到数据库。

我不知道如何处理这种情况(最佳做法,如果有的话),并且找不到回答它的问题。

安装程序是否应将数据库放入公共场所(如AllUsers)并在首次运行时将数据库从那里复制到自己的AppData文件夹中?

allusers文件夹的问题在我看来是任何人都可以窥视它并可能删除文件。

1 个答案:

答案 0 :(得分:5)

标准用户可以安装应用程序。在$ LocalAppdata \ Programs \ MyApp(FOLDERID_UserProgramFiles)下安装程序,并在HKCU下写下卸载信息。 NSIS具有特殊的SHCTX注册表根目录(由SetShellVarContext控制),如果您希望在一个安装程序中支持这两种类型的安装模式,则可以使用它。

如果您想强制用户始终提升为管理员,那么推荐的方法确实是将数据库的模板/基本版本存储在AllUsers appdata(在Vista +中称为ProgramData)(SetShellVarContext all + { {1}})或Common ProgramFiles($AppData)文件夹,让您的应用程序在首次运行时为特定用户制作副本。只有管​​理员才能删除这些位置的文件。大多数用户都具有读访问权限,但这并不重要,因为文件不应包含用户特定信息。

您可以在Certification requirements for Windows desktop apps或较早的Windows Logo requirements文档中找到这些建议:

  

10.3您的应用数据必须在计算机上的用户之间共享,应存储在ProgramData

中      

10.4您的应用程序的数据是特定用户专用的,不能与计算机的其他用户共享,必须存储在Users \\ AppData

中      

10.6您的应用必须在首次运行时写入用户数据,而不是在“每台机器”安装中安装时

     

安装应用程序时,没有正确的用户位置   存储数据。应用程序尝试修改默认关联   安装后在计算机级别的行为将失败。   相反,必须在每个用户级别上声明默认值,这会阻止   多个用户覆盖彼此的默认值。