6

我正在使用 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 版本的问题。有没有办法从安装脚本中确定这一点?也许是一种查看要提取的文件列表的方法?或者有没有更简单的方法来完成安装 VCRedists 这个看似常见的任务?

文档只是说明了这一点:

要在最终用户的系统上安装运行时库,您需要在您的应用程序中包含适当的 Visual C++ Redistributable Package (VCRedist) 可执行文件,并确保在用户安装您的应用程序时执行它。

但它没有提供有关如何“确保执行”的任何细节。

4

2 回答 2

3

我有一个类似的问题。您可以使用systeminfo.currentCpuArchitecture获取系统架构。为了找出给定的架构是否是 x64,我所做的是:

if(systemInfo.currentCpuArchitecture.search("64") < 0) {
    //x86
} else {
    //x64
}

注意:这将返回操作系统架构,因此 x64 CPU 上的 x86 操作系统将被视为 x86。

编辑:看看:https ://github.com/Skycoder42/QtIFW-Advanced-Setup 。这是我创建的一个示例项目,它做了很多额外的事情来改进 QtIFW 的使用,例如修复安装路径或正确处理离线/在线安装程序。

于 2016-05-02T10:00:13.880 回答
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");
    }
}
于 2018-11-16T16:54:17.050 回答