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

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

但是,如果一个标准用户试图安装程序,安装程序要求inputpipe理员密码(因为标准用户不能在Windows上安装程序)并且正在安装用户,现在正在切换到pipe理员,导致安装数据库pipe理员Local / AppData文件夹,而不是实际的用户AppData文件夹。

所以,实际上,当标准用户试图运行程序时,找不到数据库。

我不知道如何处理这种情况(最好的做法,如果有的话),并不能find答案。

安装程序是否应该将数据库放到公共场所,比如AllUsers,并且首先将数据库从那里复制到他们自己的AppData文件夹中?

所有用户文件夹的问题似乎是任何人都可以偷看它,并可能删除文件。

Solutions Collecting From Web of "使用NSIS将应用程序文件安装到标准的Windows用户"

标准用户可以安装应用程序 在$ LocalAppdata \ Programs \ MyApp(FOLDERID_UserProgramFiles)下安装该程序并在HKCU下写入卸载信息。 NSIS有特殊的SHCTX注册表根(由SetShellVarContext控制),如果你想要在一个安装程序中同时支持这两种安装模式,可以提供帮助。

如果你想强制用户总是提升为管理员,那么推荐的方法的确是将数据库的模板/基本版本存储在AllUsers appdata(在Vista +中称为ProgramData)( SetShellVarContext all + $AppData )或Common ProgramFiles $COMMONFILES )文件夹,让你的应用程序为特定用户首次运行一个副本。 只有管​​理员可以删除这些位置的文件。 大多数用户将具有读取权限,但是这不应该因为文件不应该包含用户特定的信息。

您可以在Windows桌面应用程序的认证要求或较早的Windows徽标要求文档中找到这些建议:

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

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

10.6您的应用程序必须在第一次运行时写入用户数据,而不是在“每台机器”安装期间写入用户数据

安装应用程序时,没有正确的用户位置来存储数据。 尝试通过应用程序在安装后修改计算机级别的默认关联行为将不成功。 相反,必须在每个用户级别声明默认值,这样可以防止多个用户覆盖对方的默认值。