Пользовательское действие Wix не смог вызвать скрипт vb - PullRequest
0 голосов
/ 29 августа 2018

У меня есть один VB-скрипт в самом пакете. Мне нужно вызвать его, используя CMD, способ вызова сценария по умолчанию, который занимает слишком много времени, поэтому я пытаюсь вызвать его с помощью CMD и CSCRIPT, но программа установки выдает ошибку при установке.

Я использую следующий код, который не работает должным образом. Я много искал, но не нашел решения.

<Binary Id="ServiceInstall"  SourceFile="..\..\..\AddVirDir.vbs" />

 <CustomAction Id="InstallService" BinaryKey ="ServiceInstall" 
               ExeCommand="CMD /C &quot;[#ServiceInstall]&quot;" 
               Execute="immediate" Return="check"  HideTarget="no" Impersonate="no"/>

Ответы [ 2 ]

0 голосов
/ 29 августа 2018

Элементы WiX IIS : Если это все IIS , я бы по возможности избегал сценариев и пользовательских действий и использовал бы встроенные элементы IIS WiX. Вот пример веб-установщика от Rainer Stropek , доступный на github.com .

Ищите <iis:WebVirtualDir ... /> и соавт. Найти документацию по WiX можно здесь . Я считаю, что вы должны быть в состоянии выполнить то, что вам нужно, без слишком большого количества пользовательских действий.

DISM.exe : сам Стропек использует настраиваемые действия в другом исходном примере, чтобы настроить IIS с помощью DISM.exe . Не уверен, что я сделал бы это так (других предложений нет), но это пример пользовательских действий и IIS.


Need-For-Speed ​​: что касается проблем с производительностью установки. Может быть, вам нужно подавить создание точки восстановления и ограничить стоимость файла? Механизм установщика Windows позволяет это - см. Ссылку ниже. Я сомневаюсь, что это будет очень эффективно, хотя. Я думаю, что в вашем инсталляторе должно быть что-то не так. Какой-то тайм-аут? Это может быть связано с другими пользовательскими действиями, медленной сетью или другими проблемами. Можете ли вы уточнить сценарий развертывания?

В любом случае, вот некоторая документация по ускорению установки MSI в целом . По сути, я бы рекомендовал только свойство MSIFASTINSTALL. DISABLEROLLBACK может вызвать серьезные проблемы.


Ведение журнала : я обычно рекомендую разработчикам установки включить подробное ведение журнала MSI по умолчанию - как описано в "Globally for all setups on a machine ", чтобы всегда иметь готовый файл журнала, когда он вам нужен. Он создается со случайным именем для каждой операции MSI в TEMP folder, и вы сортируете по изменениям, чтобы получить последнее. Файл журнала может дать понять, почему установка происходит медленно - просто определите, что на самом деле происходит. Извините, если это просто очевидные мелочи, и вы уже настроили это.

Создание файла журнала вручную :

msiexec.exe /i C:\Path\Your.msi /L*v C:\Your.log

Интерпретация журнала MSI : интерпретация файла журнала иногда может быть сложной. Вот ответ с некоторыми ссылками, чтобы помочь с этим .

0 голосов
/ 29 августа 2018

Установка и управление службами : не следует устанавливать службы с помощью сценариев. В MSI есть встроенные механизмы, которые значительно превосходят их. Вы просто используете ServiceInstall и ServiceControl WiX XML Elements и «объявляете», как должна быть зарегистрирована служба, когда и как она должна быть запущена и остановлена:

<Component>
   <File Source="$(var.SourceDir)\WindowsService.exe" />
   <ServiceInstall Name="MyService" ErrorControl="normal" Start="auto" Type="ownProcess" />
   <ServiceControl Id="MyService" Name="MyService" Start="install" Stop="both" Remove="uninstall" Wait="yes" />
</Component>

Посмотрите! Нет пользовательских действий! :-) - Просто MSI auto-magic . Для этого не нужно использовать какие-либо пользовательские действия. MSI является полнофункциональным и надежным, если ваш исполняемый файл службы ведет себя так, как он должен.

Позвольте мне дать ссылку на аналогичный пример на github на случай, если вышесказанное неясно Это более полный и сложный.


VBScript : Я написал это до того, как увидел, что вы работали со службами. Я просто добавлю это: чтобы вызвать скрипт, у которого нет функции, вы можете попробовать что-то вроде этого:

<!-- The VBScript file -->
<Binary Id='Sample.vbs' SourceFile='Sample.vbs' />

<!-- The Custom Action -->
<CustomAction Id='Sample.vbs' VBScriptCall='' BinaryKey='Sample.vbs' 
              Execute='immediate' Return='ignore'/>

<!-- And Insert Into Installation Sequence -->
<InstallExecuteSequence>
    <Custom Action='Sample.vbs' After='AppSearch'/>
</InstallExecuteSequence>

Это должно работать для такого сценария (Sample.vbs - без функций, просто неявная основная функция):

MsgBox(Session.Property("ProductName"))

Здесь есть ответ на тему пользовательских действий VBScript: Программа установки WIX выполняет vbscript из CustomAction .


...