Попытка запустить встроенный инструмент из WIX MSI для выборочной установки - PullRequest
0 голосов
/ 11 января 2012

В основном я пытаюсь создать WIX msi, которая может запускать devcon.exe (версия командной строки для Windows Hardware Manager), чтобы определить, установлена ​​ли конкретная часть оборудования.Если это так, то установите msi A, иначе установите msi B (A и B уже существуют как отдельные пакеты msi, нам нужна автоматическая выборочная установка в зависимости от оборудования).

В настоящее время я установил WIX SDK исоздали проект WIX, который правильно создает MSI.Я могу делать простые вещи, такие как выполнение CustomActions, чтобы открыть notepad.exe, такие простые вещи.

1-я проблема: у меня проблемы с поиском, как упаковать файл в установщик, который не собираетсябыть установленным в каталог.Я нашел ссылки на это, но нигде не говорится, как это сделать.Мне не нужно помещать его в теги 'Directory', если он не будет установлен на диск хоста, верно?

2-я проблема: devcon.exe нет (из того, что я могу сказать,поправьте меня, если я ошибаюсь), кажется, изменяет его возвращаемое значение в зависимости от того, что он находит, возможно потому, что он делает так много вещей и не ограничен тем, существует ли аппаратное устройство или нет.Так что, если я смогу встроить его и запустить, то мне нужно каким-то образом взять то, что он выводит, в стандартный поток вывода, а затем проанализировать его для конкретных значений, которые я ищу.

OfКонечно, было бы немного проще, потому что у меня уже есть пакетный файл, который может выполнить синтаксический анализ и установить переменную окружения, которая скажет мне то, что мне нужно знать, но, если я смогу внедрить их оба, как мне получитьпакетный файл для ссылки на встроенный devcon.exe, а затем заставить WIX прочитать переменную, или, может быть, я могу установить один (или свойство) в WIX, а затем установить его из пакетного файла?

Может быть, яследует вместо этого создать собственное действие DLL?Можно ли запустить встроенный исполняемый файл из пользовательских действий DLL?Затем я могу запустить devcon.exe и выполнить там весь анализ, а затем просто установить переменную Wix или свойство, чтобы выбрать, что делать дальше.

3-я проблема: возможность запуска одной msi из другой.Я еще не совсем до этого, но я нашел (http://softwareinstall.blogspot.com/2008/06/fun-with-msiembeddedchainer.html), что выглядит многообещающе, хотя я еще не все это прочитал. Одна проблема за раз, мне, конечно, уже достаточно:)

Ответы [ 2 ]

0 голосов
/ 12 января 2012

Для 2-й задачи я бы создал настраиваемое действие EXE или DLL, которое запускает devcon.exe, считывает его вывод и анализирует его. Сам devcon.exe может быть сохранен в ресурсах EXE / DLL и извлечен во временный каталог перед запуском, а затем удален, когда закончите с ним.

Если вы выберете DLL, вы можете изменить открытые свойства MSI. Таким образом, вы можете установить свойство, которое будет контролировать, что будет сделано в MSI.

Если вы выбираете EXE, все, что у вас есть, это код выхода. Насколько я знаю, в MSI вы мало что можете сделать с этим.


Цепная установка MSI не рекомендуется. Вы можете встроить оба драйвера в один пакет и выбрать компоненты для установки в зависимости от свойства, установленного в результате обнаружения devcon.exe.


Другой подход заключается в создании загрузочного EXE-файла, который запускает devcon.exe и определяет, какой пакет установить. Затем он просто устанавливает правильный пакет MSI.

0 голосов
/ 12 января 2012

Хорошо, первая проблема решена:

<Binary Id="Devcon" SourceFile="D:\Programming\Device_Selection\Device_Selection\devcon.exe"/>
<CustomAction Id="RunDevcon" BinaryKey="Devcon" ExeCommand="resources *vendor*device*" Return="check" Execute="deferred" Impersonate="no" />

Это гарантирует, что инструмент devcon.exe встроен в установщик и я могу запустить его в режиме администратора (который не работает, если вы не укажетеИмитировать «нет» и «Выполнить» на «отложенный»).

Следующее, что мне нужно сделать, это иметь возможность прочитать вывод, который devcon обычно отправляет на консоль (т.е. окно cmd), и затем проанализироватьдля информации.Есть ли способ получить этот вывод?

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