运行 从自定义文件夹位置卸载期间的 exe 文件
Running exe file during uninstallation from a customized folder location
我需要在卸载过程中运行 一个可执行文件 (.exe)。 .exe 文件位于 APPEXTRACTIONPATH 文件夹中(值由用户在安装期间提供)。可行吗?
位置信息也存在于其中一个注册表项中。 是否可以在卸载期间读取注册表,将位置传递给 "Directory" 并从该位置 运行 .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>
我还尝试在 CustomAction 中使用 vbscript 运行 从注册表项读取位置后的 .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>
APPEXTRACTIONPATH 直到卸载时才会被保留,除非您自己保留它,WiX 记住 属性 应该可以做到这一点。所以这应该允许您开始第一个自定义操作,尽管我不明白为什么您需要 cmd 来执行此操作。在我看来,你基本上只需要 运行 [APPLICATIONPATH]UninstallManager.exe ...
如果您尝试从您自己的卸载中调用 MSI-based 卸载,那么无论您做什么它都不会起作用,因为递归 MSI 操作是不允许的(您通常会收到错误 1618)。
第二个示例:您应该报告从 shell 运行 命令返回的结果。同样,我不清楚为什么你不能 运行 可执行文件而不是尝试用 cmd 包装它。此外,第二个示例读取 HKCU,你说它获得了正确的值,这意味着你可能正在模拟当前用户(或者你不会看到 HKCU)所以要达到你模拟的自定义操作没有提升的程度, 运行卸载可能需要提升。
我需要在卸载过程中运行 一个可执行文件 (.exe)。 .exe 文件位于 APPEXTRACTIONPATH 文件夹中(值由用户在安装期间提供)。可行吗?
位置信息也存在于其中一个注册表项中。 是否可以在卸载期间读取注册表,将位置传递给 "Directory" 并从该位置 运行 .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>
我还尝试在 CustomAction 中使用 vbscript 运行 从注册表项读取位置后的 .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>
APPEXTRACTIONPATH 直到卸载时才会被保留,除非您自己保留它,WiX 记住 属性 应该可以做到这一点。所以这应该允许您开始第一个自定义操作,尽管我不明白为什么您需要 cmd 来执行此操作。在我看来,你基本上只需要 运行 [APPLICATIONPATH]UninstallManager.exe ...
如果您尝试从您自己的卸载中调用 MSI-based 卸载,那么无论您做什么它都不会起作用,因为递归 MSI 操作是不允许的(您通常会收到错误 1618)。
第二个示例:您应该报告从 shell 运行 命令返回的结果。同样,我不清楚为什么你不能 运行 可执行文件而不是尝试用 cmd 包装它。此外,第二个示例读取 HKCU,你说它获得了正确的值,这意味着你可能正在模拟当前用户(或者你不会看到 HKCU)所以要达到你模拟的自定义操作没有提升的程度, 运行卸载可能需要提升。