Как извлечь библиотеки MSV C rutime из объединенного `Microsoft_VC141_CRT_x64.msm` во время проверки установки - PullRequest
1 голос
/ 11 марта 2020

Фон

У меня есть сложное приложение C ++, которое устанавливается с помощью установщика msi (определяется с помощью wix). Моему приложению нужны библиотеки времени выполнения MSV C, поэтому Microsoft_VC141_CRT_x64.msm объединен с моим установщиком.

        <DirectoryRef Id="APPDIR">
            <Merge Id="M.visualStudioRuntime" Language="0" SourceFile="$(var.DependenciesPath)/Microsoft_VC141_CRT_x64.msm"
             DiskId="1" />
        </DirectoryRef>
....
        <FeatureRef Id="F.SomeComponent">
            ....
            <MergeRef Id="M.visualStudioRuntime" />
        </FeatureRef>

Теперь во время процесса установки необходимо проверить некоторые данные на удаленном сервере. Для этого я извлекаю dll своего приложения во временную папку, загружаю библиотеку и выполняю некоторые функции с необходимыми параметрами. В зависимости от результата, установка может быть продолжена или нет.

Эта dll зависит от третьей стороны (хорошо, не от третьей стороны, это из другой команды). Библиотека C ++, которая также использует MSV C во время выполнения, так что c связывание не является приемлемым решением.

Проблема

Когда я загружаю dll своего приложения из временной папки, ему нужны эти библиотеки времени выполнения MSV C. Для этого мне нужны именно те dll для этой временной папки.

Проблема наблюдается только в Windows 2012, другие поддерживаемые версии Windows имеют это предустановленное время выполнения.

Вопрос

Каков наилучший способ извлечь эти библиотеки времени выполнения MSV C во временную папку?

Заметки

Я унаследовал этот установщик, и текущая реализация вручную внедряет эти dll (как дубликаты). ) в установщике извлечь их на основе предопределенного идентификатора. Это плохое решение, и мне нужно sh исправить это правильно.

1 Ответ

1 голос
/ 11 марта 2020

C ++ : Вы выполняете пользовательское действие C ++, которому требуются эти среды выполнения? Попробуйте статически связать, как описано здесь - , тогда нет необходимости в файлах VCRuntime . Если вы не используете C ++, пожалуйста, сообщите нам.

Встроенная сущность : Project settings => C/C++ => Code Generation => Изменить runtime library значение multithreaded вместо multithreaded dll.

Советы по индивидуальным действиям : здесь является ответом на типичные проблемы пользовательских действий C ++: Прервать установку, когда пользовательское действие возвращает ошибку .


Вторичный ответ : извлечь файлы из модуля слияния, более простой подход состоит в том, чтобы добавить его в проект, построить MSI, а затем запустить административную установку на MSI - что является прославленным извлечением файлов из MSI: Какова цель инициированной административной установки используя msiexe c / a?

Basi c Команда :

msiexec.exe /A MySetup.msi 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...