比如说,我有以下 WIX 标记,指示 MSI 安装程序从包含的 DLL 调用自定义操作:
<CustomAction Id="CA_SetProperties_Finalize"
Property="CA_OnInstallFinalize"
Value="[Installed],[REINSTALL],[UPGRADINGPRODUCTCODE],[REMOVE]" />
<CustomAction Id='CA_OnInstallFinalize'
BinaryKey='CADll'
DllEntry='msiOnInstallFinalize'
Execute='deferred' Impersonate='no' />
<InstallExecuteSequence>
<Custom Action='CA_SetProperties_Finalize'
Before='InstallFinalize'></Custom>
<Custom Action='CA_OnInstallFinalize'
After='CA_SetProperties_Finalize'></Custom>
</InstallExecuteSequence>
<Binary Id='CADll' SourceFile='Sources\ca-installer.dll' />
并且 DLL 本身具有以下用于自定义操作的 C++ 代码:
#pragma comment(linker, "/EXPORT:msiOnInstallFinalize=_msiOnInstallFinalize@4")
extern "C" UINT __stdcall msiOnInstallFinalize(MSIHANDLE hInstall)
{
//Do the work
if(doWork(hInstall) == FALSE)
{
//Error, cannot continue!
return ERROR_INSTALL_FAILURE;
}
return ERROR_SUCCESS;
}
发生的情况是,当我的doWork
方法失败时,安装不应该继续,所以我返回ERROR_INSTALL_FAILURE
. 问题是,在这种情况下,安装程序会简单地退出并且安装 GUI 窗口会消失。
所以我很好奇,如果我的自定义操作返回错误,有什么方法可以更改 Wix 标记以显示用户消息?