我正在使用一个名为pgModeler的应用程序,它的当前版本提供了基于QT安装程序框架的安装程序。 Windows上该安装程序的问题在于,它只能安装start menu entries per-user,也只能安装registers the app itself per-user。对于像我这样的人来说,这是一个问题,他们使用显式的admin用户来进行系统维护,而使用非管理员用户来进行日常工作。重要的是,实际上使用了两个不同的用户名(Administrator
和tschoening
),而不是Windows的默认行为,即仅使用UAC限制一个用户。
在切换到QT安装程序框架之前,已使用Inno Setup,并且其概念为distinguishing between administrative and system-wide vs. per-user installation。切换只是简单地以管理员身份执行安装程序,否则一切自动进行,而QT不再适用。
我也发现了针对QT的pre-defined constants到不同的路径,例如对于开始菜单:
UserStartMenuProgramsPath
AllUsersStartMenuProgramsPath
我还没有发现是否有像Inno这样的自动模式?诸如简单的设置,告诉安装程序总是喜欢系统范围的开始菜单和填充物,实际上是安装程序能够区分的所有内容。还是开发人员需要自行构建正确的路径?如以下示例所示:
component.addOperation("CreateShortcut", "@TargetDir@/pgmodeler.exe", "@StartMenuDir@/pgModeler.lnk"
vs。
component.addOperation("CreateShortcut", "@TargetDir@/pgmodeler.exe", "@AllUsersStartMenuProgramsPath@/@StartMenuDir@/pgModeler.lnk"
对于后者,如何在控制面板中的每个用户和系统范围的Programs and Features
之间进行切换?
谢谢!
答案 0 :(得分:0)
可以使用名为AllUsers
的设置来完成当前用户和所有用户的安装切换,该设置支持true
和false
。重要的事情是在何时何地提供该服务:一种方法实际上是在使用以下方法调用安装程序时提早实现:
installer.exe AllUsers=true
这样,用于选择开始菜单组的GUI实际上已经显示了所有用户可用的所有条目,而不仅仅是像以前一样的用户专用开始菜单的条目。另一种方法是setting values on the installer at runtime。但重要的是,这也必须在解决路径之前发生。在以下位置可以看到一个示例:
function Controller()
{
[...]
//store all users and online/offline info
installer.setValue("allUsers", isAdmin ? "true" : "false");
installer.setValue("isOffline", installer.isOfflineOnly() ? "true" : "false");
[...]
}
https://github.com/Skycoder42/QtIFW-Advanced-Setup/blob/master/installer/config/controller.js
这些内容在过去也得到了增强,即使我在文档中还没有找到关于其确切含义和使用方法的任何解释。
https://bugreports.qt.io/browse/QTIFW-124
此外,该软件未在Programs and Features
中正确注册,它仅以管理员身份出现: