Установка распространяемых VC++ в установщике Qt Installer Framework (QtIFW)?

Я создаю установщики для моего приложения с помощью Qt Installer Framework (v2.0.1). Я создаю свое приложение для x86 и x64 для Windows, поэтому я создаю установщик для каждой архитектуры с различными распространяемыми VC++, упакованными в каждую (vcredist_x86.exe и vcredist_x64.exe из MSVC++2013). В документации QtIFW очень мало подробностей, но я обнаружил, что могу добавить операцию в installscript.qs для автоматического запуска установщика vcredist после извлечения моих файлов:

component.addOperation("Execute", "@TargetDir@/vcredist_x64.exe", "/quiet", "/norestart");

Но тогда у меня возникает проблема определения, является ли мой установщик версией x86 или x64. Есть ли способ определить это из установочного скрипта? Возможно, способ просмотреть список файлов, которые будут извлечены? Или есть более простой способ выполнить эту, казалось бы, общую задачу по установке видеомагнитофонов?

Документация просто утверждает это:

Чтобы установить библиотеки времени выполнения в системе конечного пользователя, необходимо включить соответствующий исполняемый файл Visual C++ Redistributable Package (VCRedist) в ваше приложение и убедиться, что он выполняется, когда пользователь устанавливает ваше приложение.

Но он не предлагает никаких подробностей о том, как "обеспечить его выполнение".

2 ответа

У меня была похожая проблема. Вы можете получить системную архитектуру, используя systeminfo.currentCpuArchitecture. Чтобы узнать, является ли данная архитектура x64, я сделал следующее:

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

Примечание. Это вернет архитектуру ОС, поэтому ОС x86 на процессоре x64 будет выглядеть как x86.

Изменить: Посмотрите на: https://github.com/Skycoder42/QtIFW-Advanced-Setup. Это пример проекта, который я создал, который делает много дополнительных вещей для улучшения работы с QtIFW, как, например, повторение пути установки или правильная обработка автономных / онлайн-установщиков.

Вот полная функция, которую я использую для этого в файле 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");
    }
}
Другие вопросы по тегам