如何在QT安装程序框架中区分每用户安装和系统范围安装?

时间:2019-12-28 11:55:13

标签: windows qt installer qt-installer

我正在使用一个名为pgModeler的应用程序,它的当前版本提供了基于QT安装程序框架的安装程序。 Windows上该安装程序的问题在于,它只能安装start menu entries per-user,也只能安装registers the app itself per-user。对于像我这样的人来说,这是一个问题,他们使用显式的admin用户来进行系统维护,而使用非管理员用户来进行日常工作。重要的是,实际上使用了两个不同的用户名(Administratortschoening),而不是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之间进行切换?

谢谢!

1 个答案:

答案 0 :(得分:0)

可以使用名为AllUsers的设置来完成当前用户和所有用户的安装切换,该设置支持truefalse。重要的事情是在何时何地提供该服务:一种方法实际上是在使用以下方法调用安装程序时提早实现:

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中正确注册,它仅以管理员身份出现:

Programs and features Admin Programs and features non-Admin