Ошибка Wix 1721, связанная с CustomAction

Я подписан на CostomAction

<Binary Id='ManualsBat' SourceFile='bin\Debug\test.bat' />

<CustomAction 
  Id="manuals"
  BinaryKey="ManualsBat"
  ExeCommand="[SourceDir]Manuals &quot;[Agent]Manuals&quot;"
  Execute="immediate"
  Return="check" />

test.bat содержит следующие строки:

@echo off
echo Hello this a test batch file
pause
mkdir %2
copy %1 %2

В основном он предназначен для того, чтобы при запуске установщика командный файл запускался. Пакетный файл должен создать новый каталог «Руководства [Agent]» и скопировать все файлы из руководств [SourceDir] в руководства [Agent].

Когда я создаю .wxs, он не выдает ошибок, когда я запускаю .msi, тогда он жалуется на следующее в файлах журнала

Ошибка 1721. Проблема с этим пакетом установщика Windows. Программа, необходимая для завершения этой установки, не может быть запущена. Обратитесь в службу поддержки или к поставщику пакета. Действие: руководства, расположение: C: \ Windows \ Installer \ MSI1F50.tmp, команда: C: \ dev \ CD \ Agent \ pd \ components \ link \ source \ Link \ Installer \ WiX \ WiX \ bin \ Debug \ Manuals " D: \ Cam \ city \ Agent \ Manuals

У кого-нибудь был опыт с такого рода ошибкой. Было бы здорово, если бы кто-нибудь помог мне решить эту проблему.


person sanam_bl    schedule 10.08.2012    source источник
comment
Вы в этом разобрались? У меня аналогичная проблема с установкой драйвера настраиваемого действия.   -  person mrtumnus    schedule 01.11.2017


Ответы (3)


Может проблема в кавычках. Изменение котировок ExeCommand. Попробуй это:

<Binary Id='ManualsBat' SourceFile='bin\Debug\test.bat' />

<CustomAction 
  Id="manuals"
  BinaryKey="ManualsBat"
  ExeCommand='"[SourceDir]Manuals" "[Agent]Manuals"'
  Execute="deferred"
  Impersonate="no"
  Return="check" />

<InstallExecuteSequence>
  <Custom Action="manuals" Before="InstallFinalize">Not Installed</Custom>
</InstallExecuteSequence>
person Sergik666    schedule 19.02.2013

Скорее всего, для вашего настраиваемого действия требуются права администратора. Попробуйте установить атрибут Execute на deferred и Impersonate на no. Обратите внимание, что эти параметры требуют, чтобы действие было запланировано после InstallFinalize стандартного действия.

person cosmin    schedule 10.08.2012
comment
Добавление After='InstallFinalize' дало мне ошибку: ... это настраиваемое действие в сценарии. Он должен быть упорядочен между действием InstallInitialize и действием InstallFinalize в таблице InstallExecuteSequence - person Jesus is Lord; 25.04.2017

Обычно вам нужно вызвать cmd / c foo.bat (или команду в Win9x) для обработки файлов .bat.

Однако я бы никогда не сделал этого в одном из моих установщиков. Это нарушает общий дизайн установщика Windows. MSI - это транзакционный декларативный язык программирования. Внедрение процедурного кода процесса значительно увеличивает вероятность сбоя (как вы уже переживаете) и, что еще хуже, сводит на нет транзакционные преимущества MSI.

Например, если вы создаете папку и копируете файл, он не будет отменен во время отката и не будет удален во время удаления. Вместо этого вы должны использовать встроенные функции установщика Windows (элементы CreateFolder и CopyFile) для достижения ваших целей.

В тех случаях, когда действительно необходимы настраиваемые действия (в вашем примере вы просто изобретаете колесо с помощью неполноценного решения), их следует разрабатывать с использованием надежных языков и поддерживать декларативный (управляемый данными) и транзакционный дизайн с соблюдением модели безопасности, которую использует MSI. .

person Christopher Painter    schedule 11.08.2012