Запуск 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 & 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), поэтому, чтобы добраться до точки, где ваше подменяемое пользовательское действие не повышено, и запуск этой деинсталляции может потребовать повышения прав.