Запуск exe-файла во время удаления из настроенной папки

Мне нужно запустить исполняемый файл (.exe) во время удаления. Файл.exe находится в папке "APPEXTRACTIONPATH" (значение указывается пользователем во время установки). Это выполнимо?

Информация о местоположении также присутствует в одном из разделов реестра. Можно ли прочитать реестр во время удаления, передать местоположение в "Каталог" и запустить файл.exe из этого места. Пожалуйста, дайте мне знать. Заранее спасибо!

Фрагмент кода:

<Directory Id='TARGETDIR' Name='SourceDir'>
  <Directory Id="WINDOWSVOLUME" >
    <Directory Id="LICENSEFILEPATH" Name="LicenseFileDir">
    </Directory>
    <Directory Id="APPEXTRACTIONPATH" Name="AppExtractDir">
    </Directory>
  </Directory>
</Directory>


<CustomAction Id  ="ExecuteSomeExe"
          Directory   ="APPEXTRACTIONPATH"
          ExeCommand  ="[SystemFolder]cmd.exe /C start SomeExe.exe &amp; exit"
          Execute     ="deferred"
          Impersonate ="no"
          Return      ="asyncNoWait"
                  />

<InstallExecuteSequence>
... ... ...
<Custom Action="ExecuteSomeExe" Before="InstallFinalize">Installed AND NOT UPGRADINGPRODUCTCODE</Custom>
</InstallExecuteSequence>

Я также попытался использовать vbscript в CustomAction для запуска.exe-файла после чтения местоположения из раздела реестра. Местоположение читается отлично, но выполнение не происходит.

<CustomAction Id="ExecuteSomeExe"
              Execute="deferred"
              Script="vbscript"
              >
  <![CDATA[
  On error resume next

  Dim WshShell1
  Dim WshShell2
  Dim appExtractPath
  Dim fullExecPath




  Set WshShell1 = CreateObject("WScript.Shell")
  appExtractPath = WshShell1.RegRead ("HKCU\Software\MyCompany\MyApp\AppExtractionPath")
  msgbox "App Extraction Path = "&appExtractPath

  Set WshShell2 = WScript.CreateObject("WScript.Shell") 
  fullExecPath = appExtractPath &"SomeExe.exe"
  msgbox "Before running exe from " &fullExecPath
  'Running .exe file
  WshShell2.Run(fullExecPath)
  msgbox "After running exe from " &fullExecPath
  'Trying to run in another way
  WshShell2.Run "cmd /K CD "&appExtractPath&" & SomeExe.exe"

  Set WshShell1 = Nothing
  Set WshShell2 = Nothing


  ]]>
</CustomAction>

1 ответ

Решение

APPEXTRACTIONPATH не будет сохраняться до времени удаления, если вы не сохраните его самостоятельно, для этого должно работать свойство запоминания WiX. Так что это должно позволить запустить ваше первое настраиваемое действие, хотя я не понимаю, зачем вам нужен cmd для этого. Мне кажется, что вам просто нужно запустить [APPLICATIONPATH]UninstallManager.exe ...

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

Второй пример: вы должны сообщить о результате, возвращенном командой запуска оболочки. Опять же, мне не понятно, почему вы не можете просто запустить исполняемый файл вместо того, чтобы пытаться обернуть его с помощью cmd. Кроме того, во втором примере читается HKCU, и вы говорите, что он получает правильное значение, и это означает, что вы, вероятно, подражаете текущему пользователю (или вы не увидите HKCU), поэтому, чтобы добраться до точки, где ваше подменяемое пользовательское действие не повышено, и запуск этой деинсталляции может потребовать повышения прав.

Другие вопросы по тегам