Моя CustomAction для запуска исполняемого файла через WixShellExect не удается - PullRequest
2 голосов
/ 30 января 2012

Я построил wix, но я падаю в последней части, где я запускаю приложение, которое позволяет пользователям общаться с Windows Service, которую я только что установил.Установка откатывается.

Если я не включаю настраиваемое действие WixShellExec, тогда исполняемый файл устанавливается, и я могу без проблем запустить приложение из папки установки.

У меня это вФайл product.wxs:

<!--Used to start the Console when install complete-->
<Component Id="Cmp_ArduinoControllerConsole" Directory="dir_Console" Guid="83D1FD64-0DE5-461B-997D-641C394999F1">
<File Id="File_ArduinoControllerConsole" KeyPath="yes" Source="$(var.MyDir)\Console\RJB.ArduinoController.Console.exe" />
</Component>

<!--Set up the action to run the console at the end of the installation -->
<Property Id="WixShellExecTarget" Value="[#File_ArduinoControllerConsole]" />
<CustomAction Id="Run_File_ArduinoControllerConsole" BinaryKey="WixCA" DllEntry="WixShellExec" Impersonate="yes" />

<!--Sets when in the install sequence the Custom Action runs-->
<InstallExecuteSequence>
    <Custom Action="Run_File_ArduinoControllerConsole" 
            Before="InstallFinalize" />
</InstallExecuteSequence>

В журнале установки появляется ошибка:

MSI (s) (0C:34) [23:40:29:636]: Invoking remote custom action. DLL: C:\Windows\Installer\MSI6179.tmp, Entrypoint: WixShellExec

WixShellExec:  Error 0x80070002: ShellExec failed with return code 2
WixShellExec:  Error 0x80070002: failed to launch target

CustomAction Run_File_ArduinoControllerConsole returned actual error code 1603 (note this may not be 100% accurate if translation happened inside sandbox)
Action ended 23:40:29: Run_File_ArduinoControllerConsole. Return value 3.

Может кто-нибудь подсказать, что я сделал не так?

Ответы [ 3 ]

4 голосов
/ 01 февраля 2012

Решение.

Я не смог получить значение в свойстве:

для получения значения, поэтому я изменил настраиваемое действие на следующее:

<CustomAction Id='Launch_ArduinoControllerConsole' FileKey='File_ArduinoControllerConsole' ExeCommand='' Return='asyncNoWait' />

и заменил его следующим образом:

    <InstallExecuteSequence>
  <Custom Action='Launch_ArduinoControllerConsole' After='InstallFinalize'>NOT Installed</Custom>
</InstallExecuteSequence>

Который запускал исполняемый файл после завершения установки. Настройка CustomAction Return = 'asyncNoWait' - это то, что нужно.

Если кто-то узнает, почему значение в Property неверно, я заинтригован, но сейчас у меня есть исправление.

3 голосов
/ 30 января 2012

Чтобы получить доступ к файлам после их установки, пользовательские действия должны выполняться в отложенном контексте.Установите @ Execute = "deferred" в вашем элементе CustomAction.Или используйте метод, описанный в Как: запустить установленное приложение после установки .

0 голосов
/ 26 июля 2013

Для чего бы это ни стоило, вот как я должен был установить значение свойства, которое было использовано немедленным действием:

<Property Id="MyProperty"> 1234 </Property>
...