我正在使用Qt Installer Framework(v2.0.1)为我的应用程序构建安装程序。我正在为Windows上的x86和x64构建我的应用程序,因此我正在为每个体系结构构建一个安装程序,每个体系结构中都包含不同的VC ++ Redistributables(来自MSVC ++ 2013的vcredist_x86.exe和vcredist_x64.exe)。 QtIFW文档令人沮丧的细节,但我发现我可以在installscript.qs中添加一个操作,以便在我的文件被提取后以静默方式运行vcredist安装程序:
component.addOperation("Execute", "@TargetDir@/vcredist_x64.exe", "/quiet", "/norestart");
但是我遇到了确定我的安装程序是x86还是x64版本的问题。有没有办法从installscript确定这个?也许是一种查看要提取的文件列表的方法?或者是否有更简单的方法来完成安装VCRedists这个看似常见的任务?
文档只说明了这一点:
要在最终用户的系统上安装运行时库,您需要在应用程序中包含相应的Visual C ++ Redistributable Package(VCRedist)可执行文件,并确保在用户安装应用程序时执行该文件。
但它没有提供关于如何“确保它被执行”的任何细节。
答案 0 :(得分:3)
我有类似的问题。您可以使用systeminfo.currentCpuArchitecture 获取系统架构。为了找出,给定的架构是否是x64,我做的是:
if(systemInfo.currentCpuArchitecture.search("64") < 0) {
//x86
} else {
//x64
}
注意:这将返回OS体系结构,因此x64 CPU上的x86 OS将被视为x86。
编辑:看看:https://github.com/Skycoder42/QtIFW-Advanced-Setup。它是我创建的一个示例项目,它可以提供许多额外的功能来改进QtIFW的使用,例如修复安装路径或正确处理离线/在线安装程序。
答案 1 :(得分:0)
这是我用来在installscript.qt中执行此操作的完整功能。仅64位。它检查是否有一个比当前可用版本(26706)小的版本:
Component.prototype.installVCRedist = function()
{
var registryVC2017x64 = installer.execute("reg", new Array("QUERY", "HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\VisualStudio\\14.0\\VC\\Runtimes\\x64", "/v", "Installed"))[0];
var doInstall = false;
if (!registryVC2017x64) {
doInstall = true;
}
else
{
var bld = installer.execute("reg", new Array("QUERY", "HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\VisualStudio\\14.0\\VC\\Runtimes\\x64", "/v", "Bld"))[0];
var elements = bld.split(" ");
bld = parseInt(elements[elements.length-1]);
if (bld < 26706)
{
doInstall = true;
}
}
if (doInstall)
{
QMessageBox.information("vcRedist.install", "Install VS Redistributables", "The application requires Visual Studio 2017 Redistributables. Please follow the steps to install it now.", QMessageBox.OK);
var dir = installer.value("TargetDir");
installer.execute(dir + "/VC_redist.x64.exe", "/norestart", "/passive");
}
}