Запуск скопированных файлов в WiX с помощью настраиваемого действия

Я создаю установщик MSI с помощью WiX, и у меня есть, скажем, файл * .bat, который Я копирую в SomeFolder2 под %temp% (что-то вроде фрагмента кода ниже ...)

...

<Directory Id='TARGETDIR' Name='SourceDir'>
    <Directory Id='ProgramFilesFolder' Name='PFiles'>
       <Directory Id='MyDir' Name='SomeFolder'>

           <!-- %TEMP -->
           <Directory Id="TempFolder" Name="TmpFolder">
               <Directory Id='MyDir2' Name='SomeFolder2'>

                   <!-- CREATE THE %TEMP%\SomeFolder2 FOLDER -->
                   <Component Id='FolderComponent' Guid='{GUID}'>
                       <CreateFolder />
                   </Component>

                   <Component Id='CheckComponent' Guid='{GUID}'>
                       <File Id='mybat' Name='mybat.bat' DiskId='1' Source='.\mybat.bat' KeyPath="yes">
                           <Shortcut Id="mybatShcut"
                                     Directory="ProgramMenuDir"
                                     Name="{name}"
                                     WorkingDirectory='INSTALLDIR'
                                     Advertise="yes" />
                       </File>
                   </Component>
               </Directory>
           </Directory>
       </Directory>
    </Directory>
</Directory>

...

Теперь, чтобы запустить это, у меня есть два настраиваемых действия (DESTDIR это %TEMP%\SomeFolder2):

<CustomAction Id="SetPath" Property="ThePath" Value="[DESTDIR]\mybat.bat" />
<CustomAction Id="StartAction" Property="ThePath" ExeCommand="" Return="asyncNoWait" />

Затем в последовательности установки:

<InstallExecuteSequence>
    <Custom Action="SetPath" After="{some standard MS action}">NOT REMOVE="ALL"</Custom>
    <Custom Action="StartAction" Before="{some other action}">NOT REMOVE="ALL"</Custom>
    ...
</InstallExecuteSequence>

Я заставил SetPath запускаться после множества стандартных действий (например, PublishProduct), в то время как StartAction будет выполняться перед другим настраиваемым действием.

Когда я запускаю файл MSI, я смотрю в журнал, и ThePath устанавливает правильный путь. Однако при запуске StartAction я получаю эту ошибку:

Возвращаемое значение 1631.

которые, согласно документации, переводятся как «ERROR_CREATE_FAILED» (не удалось запустить службу установщика Windows. Обратитесь в службу поддержки). Дело в том, что файл действительно был скопирован в %TEMP%\SomeFolder2 (до установки пути и фактического выполнения, могу я добавить ...), но по какой-то причине он вообще не выполняется (если вы выполняете его вручную или через командную строку или еще что-то, он выполняется нормально).

Я пробовал поместить этот же файл в ProgramFiles\Some_Directory_For_The_Program. Происходит то же самое; он копируется туда, но не выполняется. Почему это происходит?


person callie16    schedule 27.10.2010    source источник


Ответы (1)


Во-первых, если вы хотите использовать файл, установленный вашим пакетом, в настраиваемом действии, вы должны сделать его отложено. То есть запуск CA StartAction в вашем примере должен быть отложен. Кроме того, я пытаюсь использовать стандартный ЦС QtExec, когда мне нужно запускать исполняемые файлы из ЦС. .

Надеюсь, это поможет.

person Yan Sklyarenko    schedule 27.10.2010