Пакетный файл не выполняется до удаления приложения с помощью WiX - PullRequest
0 голосов
/ 26 июня 2018

Мой пакетный файл, который я пытаюсь запустить, когда необходимо удалить плагин Excel, не выполняется. Я использую следующие пользовательские действия для установки после установки, а также для удаления продукта. Следующий код:

  <CustomAction Id="registeraddin" ExeCommand="[INSTALLFOLDER]RegisterMilerAddIn.bat" Directory="INSTALLFOLDER" Impersonate="no" Execute="deferred" Return="asyncWait" />
  <CustomAction Id="unregisteraddinpostinstall" ExeCommand="[INSTALLFOLDER]UnRegisterMilerAddIn.bat" Directory="INSTALLFOLDER" Impersonate="no" Execute="deferred" Return="asyncWait" />

  <InstallExecuteSequence>
    <Custom Action="registeraddin" After="InstallFiles">NOT Installed</Custom>
    <Custom Action="unregisteraddinpostinstall" After="InstallFiles">Installed AND (REMOVE = "ALL")</Custom>
  </InstallExecuteSequence>

Выдает эту ошибку в журнале:

MSI (s) (44:04) [11: 29: 00: 437]: Выполнение операции: ActionStart (Name = unregisteraddinpostinstall ,,)

MSI (s) (44:04) [11: 29: 00: 437]: Выполнение операции: CustomActionSchedule (Action = unregisteraddinpostinstall, ActionType = 1058, Source = C: \ Program Файлы (x86) \ Werner Enterprises \ Web Miles Excel Addin \, Target = C: \ Program Files (x86) \ Werner Enterprises \ Web Miles Excel Addin \ UnRegisterMilerAddIn.bat,)

MSI (44:04) [11: 29: 00: 846]: примечание: 1: 1722 2: unregisteraddinpostinstall 3: C: \ Program Files (x86) \ Werner Предприятия \ Надстройка Web Miles для Excel \ 4: C: \ Program Files (x86) \ Werner Предприятия \ Web Miles Excel Addin \ UnRegisterMilerAddIn.bat

MSI (44:04) [11: 29: 00: 846]: примечание: 1: 2205 2: 3: ошибка MSI (44:04) [11: 29: 00: 846]: примечание: 1: 2228 2: 3: ошибка 4: SELECT Message ОТ Error ГДЕ Error = 1722 CustomAction unregisteraddinpostinstall вернул фактический код ошибки 100 (обратите внимание на это может быть не на 100% точным, если перевод произошел внутри песочницы)

MSI (44:04) [11: 29: 10: 900]: примечание: 1: 2205 2: 3: ошибка MSI (44:04) [11: 29: 10: 900]: примечание: 1: 2228 2: 3: ошибка 4: SELECT Message ОТ Error ГДЕ Error = 1709

MSI (44:04) [11: 29: 10: 900]: Продукт: WebMiles_Addin_Installer - Ошибка 1722. Проблема с этим пакетом установщика Windows. Программа, запущенная как часть установки, не завершилась, как ожидалось. контакт Ваш обслуживающий персонал или поставщик пакетов. действие unregisteraddinpostinstall, расположение: C: \ Program Files (x86) \ Werner Предприятия \ Надстройка Web Miles Excel \, команда: C: \ Program Files (x86) \ Werner Enterprises \ Web Miles Excel Addin \ UnRegisterMilerAddIn.bat

Эта ошибка мне неясна. Я не делаю ничего необычного в моем пакетном файле. установка надстройки Excel работает отлично (что является предпосылкой этого приложения). Но я не могу удалить надстройку, по-видимому, таким же образом, как и вышеупомянутая ошибка в журнале.

Для полноты, это содержимое моей регистрационной партии (RegisterMilerAddIn.bat):

SET WorkFolder= "C:\Program Files (x86)\Werner Enterprises\Web Miles Excel Addin"

SET _NET_4_Folder= %WinDir%"\Microsoft.NET\Framework\v4.0.30319"

%_NET_4_Folder%\regasm.exe %WorkFolder%\Miler.ExcelAddin.dll /Codebase /tlb:%WorkFolder%\Miler.ExcelAddin.tlb >> C:\temp\log.txt

И отменить регистрацию пакета (UnRegisterMilerAddIn.bat):

SET WorkFolder= "C:\Program Files (x86)\Werner Enterprises\Web Miles Excel Addin"

SET _NET_4_Folder= %WinDir%"\Microsoft.NET\Framework\v4.0.30319"

%_NET_4_Folder%\regasm.exe /unregister %WorkFolder%\Miler.ExcelAddin.dll /Codebase /tlb:%WorkFolder%\Miler.ExcelAddin.tlb >> C:\temp\log.txt

Ответы [ 2 ]

0 голосов
/ 29 июня 2018

После исследования и опробования множества различных атрибутов я нашел решение своей проблемы. Поэтому я выкладываю это здесь, может это поможет кому-то еще. Я обнаружил, что мой командный файл удалялся до того, как я смог запустить процесс удаления надстройки, как ускользнул Брайан Сазерленд. В конце концов я обнаружил следующий код, который выполнялся за раз до удаления всех файлов.

<InstallExecuteSequence>
    <Custom Action="unregisteraddinpostinstall" After="InstallInitialize">REMOVE="ALL"</Custom>
  </InstallExecuteSequence>

Так что я все еще буду использовать приведенный выше код, но я собираюсь реализовать предложения Стейна Асмюля, чтобы очистить мой процесс и не использовать командный файл. Причина, по которой я все еще использую After="InstallInitialize", заключается в том, что мой ExcelAddin.dll также является частью процесса regasm.exe /unregister для удаления библиотек классов типов. Он тоже был удален, прежде чем я смог запустить скрипт. После того, как я реализовал After = "InstallInitialize"> REMOVE = "ALL", скрипт работает должным образом. Еще раз спасибо Брайану и Штейну!

0 голосов
/ 29 июня 2018

Heat.exe

ОБНОВЛЕНИЕ : мне не понравилось то, что я предлагаю ниже (использование пользовательских действий), и Bob Arnson (кодер WiX) напомнило мне, что heat.exe (универсальный инструмент для сбора урожая WiX / генератор разметки XML) может выполнить эту работу:

heat.exe file MyLib.dll -sfrag -suid -ag -out ComInterop.wxs

Если это работает - что вы должны проверить - вы удалили много «clunk» из вашего установщика WiX.

Вам необходимо вставить сгенерированную информацию COM / реестра в компонент, содержащий ваш файл COM Interop в вашем основном исходном файле WiX. Это требует некоторой осторожности и точности, и это не совсем тривиально, но вы избегаете большого неуклюжего риска пользовательских действий.

Вы также можете нагревать файл tlb:

heat file MyFile.tlb -sfrag -suid -ag -out ComInterop2.wxs

Кажется, информация об интерфейсе пропущена на heat.exe.


Пакетные файлы считаются вредными

При всем уважении и намерении помочь: пакетные файлы могут быть чрезвычайно подвержены ошибкам при развертывании. Они почти не имеют контроля ошибок или способны обрабатывать непредвиденные ситуации. Я считаю их нежелательными для современного развертывания, и я думаю, что это общее мнение.

Вы должны иметь возможность вызывать regasm.exe напрямую с помощью пользовательского действия EXE - устраняя всю сложность и сложность пакетного файла. Для справки: мне тоже не нравятся EXE CA.

Достаточно мнений. Вот базовый пример макета EXE-CA для вставки в полноценный источник WiX ( Какие символы мне нужно экранировать в XML-документах? ):

<..>

    <!-- AppSearch to find regasm.exe -->

    <Property Id="REGASM4" Secure="yes">
        <DirectorySearch Id="RegAsmPathx86" Path="[WindowsFolder]Microsoft.NET\Framework\v4.0.30319">
            <FileSearch Name="regasm.exe" />
         </DirectorySearch>
    </Property>

<..>

    <!-- Run regasm.exe CAs -->

    <CustomAction Id="Install" Directory="SystemFolder"
                  ExeCommand="&quot;[REGASM4]&quot; &quot;[MyAPP]ClassLib.dll&quot; /Codebase /silent /tlb:&quot;[MyAPP]ClassLib.tlb&quot;"
                  Execute="deferred" Impersonate="no" />

    <CustomAction Id="Uninstall" Directory="SystemFolder"
                  ExeCommand="&quot;[REGASM4]&quot; /unregister &quot;[MyAPP]ClassLib.dll&quot; /Codebase /silent /tlb:&quot;[MyAPP]ClassLib.tlb&quot;"
                  Execute="deferred" Impersonate="no" />
 <..>

   <!-- Sequenced And Conditioned CAs -->

    <InstallExecuteSequence>
        <Custom Action="Install" After="InstallFiles">Not Installed</Custom>
        <Custom Action="Uninstall" Before="RemoveFiles">REMOVE~="ALL"</Custom>
    </InstallExecuteSequence>
...