我有一个需要运行SQLite DB的应用程序。在我的NSIS脚本中,数据库被复制到用户的Local / AppData文件夹中。如果安装程序的用户是admin用户,则此方法工作正常。
但是,如果标准用户尝试安装程序,则安装程序会要求输入管理员密码(因为标准用户无法在Windows上安装程序),并且正在安装的用户现在已切换为管理员,从而导致将数据库安装在admins Local / AppData文件夹,而不是实际用户的AppData文件夹。
因此,实际上,当标准用户尝试运行该程序时,它找不到数据库。
我不确定如何处理这种情况(如果有的话,是最佳实践),也找不到解决问题的方法。
安装程序是否应该将数据库放到像AllUsers这样的公共场所,并在首次运行时将数据库从那里复制到自己的AppData文件夹中?
在我看来,allusers文件夹的问题是任何人都可以窥视它并可能删除文件。
标准用户可以安装应用程序。在$ LocalAppdata \ Programs \ MyApp(FOLDERID_UserProgramFiles)下安装程序,并在下写入卸载信息HKCU
。如果您想在一个安装程序中同时支持两种类型的安装模式,则NSIS具有特殊的SHCTX
注册表根目录(由控制SetShellVarContext
),可以帮助您解决此问题。
如果要强制用户始终提升为管理员,则建议的方法的确是将数据库的模板/基本版本存储在AllUsers应用程序数据(在Vista +中称为ProgramData)(SetShellVarContext all
+ $AppData
)或Common ProgramFiles($COMMONFILES
)文件夹中,并具有您的应用程序在首次运行时为特定用户创建一个副本。只有管理员可以删除这些位置中的文件。大多数用户将具有读取访问权限,但这无关紧要,因为文件不应包含用户特定的信息。
您可以在Windows桌面应用程序的认证要求或较旧的Windows Logo要求文档中找到以下建议:
10.3必须在计算机上的用户之间共享的应用程序数据应存储在ProgramData中
10.4特定用户专有的应用程序数据,并且该数据不与计算机的其他用户共享,必须存储在Users \\ AppData中
10.6您的应用必须在首次运行时而不是在“按机器”安装中的安装过程中写入用户数据
安装该应用程序后,没有正确的用户位置可用于存储数据。应用尝试在安装后尝试在计算机级别修改默认关联行为将不会成功。相反,必须在每个用户级别声明默认值,以防止多个用户覆盖彼此的默认值。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句