我正在wix中编写一个虚拟安装程序,它应该提示重新启动,如果是,则重启机器并返回失败。
我能够成功提示重新启动。但是在重启和非重启的两种情况下都会安装MSI。
为了返回失败,我编写了一个自定义操作,并基于用户在使用msiexec时设置的属性RETURNCODE,自定义操作返回失败。
以下是自定义操作的代码:
UINT __stdcall CustomExit(MSIHANDLE hInstall) {
HRESULT hr = S_OK;
UINT er = ERROR_SUCCESS;
LPWSTR pReturnCode= NULL;
int iReturnCode = 0;
ReadPropertyString(hInstall, L"RETURNCODE", &pReturnCode);
iReturnCode = _wtoi(pReturnCode);
if(pReturnCode)
delete pReturnCode;
if(iReturnCode == 0)
{
er = ERROR_INVALID_HANDLE;
}
else
{
er = ERROR_SUCCESS;
}
return er; }
以下是安排相同的wix代码:
<CustomAction Id="CAExit" BinaryKey="BID_NativeCustomAction" DllEntry="SetCustomExit" />
<InstallExecuteSequence>
<ForceReboot After="InstallInitialize">REBOOTMACHINE=1</ForceReboot>
<Custom Action="CAExit" After="ForceReboot">1</Custom>
</InstallExecuteSequence>