Как деинсталлятор wix (exe) может удалить себя - PullRequest
0 голосов
/ 02 мая 2018

У меня есть мой собственный установщик и деинсталлятор, который устанавливает MSI и другие ресурсы на ПК. Процесс удаления работает в следующих строках:

<DirectoryRef Id="TARGETDIR">
    <Component Id="AddRemovePrograms" Guid="*" KeyPath="yes">
      <RegistryValue Id="ARPEntry1" Type="string" Action="write" Root="HKLM" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\$(var.ProductCode)" Name="DisplayName" Value="$(var.ProductName)"/>
      <RegistryValue Id="ARPEntry2" Type="string" Action="write" Root="HKLM" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\$(var.ProductCode)" Name="DisplayVersion" Value="$(var.ProductVersion)"/>
      <RegistryValue Id="ARPEntry3" Type="string" Action="write" Root="HKLM" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\$(var.ProductCode)" Name="Publisher" Value="$(var.Manufacturer)"/>
      <RegistryValue Id="ARPEntry4" Type="integer" Action="write" Root="HKLM" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\$(var.ProductCode)" Name="NoModify" Value="1"/>
      <RegistryValue Id="ARPEntry5" Type="string" Action="write" Root="HKLM" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\$(var.ProductCode)" Name="UninstallString" Value="[CommonAppDataFolder]\[Manufacturer]\[ProductName]\Uninstaller.exe"/>
      <RegistryValue Id="ARPEntry6" Type="string" Action="write" Root="HKLM" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\$(var.ProductCode)" Name="InternalVersion" Value="$(var.ProductVersion)"/>
    </Component>
    <Directory Id="CommonAppDataFolder">
      <Directory Id="UninstallCompanyDir" Name="$(var.Manufacturer)">
        <Directory Id="UninstallProductDir" Name="$(var.ProductName)">
          <Component Id="UninstallerExe" Guid="*">
            <File Id="UninstallerExeFile" Name="Uninstaller.exe" Source="..\Uninstaller.exe" Vital="yes" KeyPath="yes">
            </File>
          </Component>
        </Directory>
      </Directory>
    </Directory>
  </DirectoryRef>  

В Uninstaller.exe я копирую себя в папку TEMP и запускаю ее оттуда, но проблема в том, что мой деинсталлятор остался там (в TEMP).

Вопрос: Как я могу удалить свой исполняемый файл (из TEMP или оригинал) с помощью сценариев wix?

Ответы [ 3 ]

0 голосов
/ 02 мая 2018

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

START /WAIT YourUninstaller.exe
Del YourUninstaller.exe
Del ThisBatchFile.bat
0 голосов
/ 02 мая 2018

Существует документированное «как» для этого сценария, в котором не требуется иметь исполняемый файл, используя msiexec.exe вместо собственного исполняемого файла:

Как: создать ярлык для удаления

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

Как правило, вам не нужно удалять в меню «Пуск» начиная с Windows 10 и далее. Щелчок правой кнопкой мыши на установленном приложении в любом случае вызывает удаление, и оно может даже подавить ваше.

0 голосов
/ 02 мая 2018

Вы можете сделать это с помощью пакета!

что-то вроде

cmd.exe /C TIMEOUT 10 && del "{your uninstaller path}"

Вы запускаете его при закрытии события удаления. Это вызовет новый процесс cmd и выполнит команду удаления через 10 секунд.

...