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

问题描述 投票:0回答:1

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

谢谢!

windows qt installer qt-installer
1个回答
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 AdminPrograms and features non-Admin

© www.soinside.com 2019 - 2024. All rights reserved.