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

Tot*_*son 2 windows installation nsis

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

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

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

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

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

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

And*_*ers 5

标准用户可以安装应用程序 在$ 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您的应用必须在首次运行时写入用户数据,而不是在"每台机器"安装中安装期间

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