1
我們有問題,C++中的遞延自定義操作。我們只需要一個customactiondata屬性'apacheconfpath'的值,該屬性此時具有一個虛擬值測試值。C++自定義操作返回空字符串
這裏是我們的C++自定義操作:
UINT __stdcall AppendToApacheConfigFile(MSIHANDLE hInstall)
{
HRESULT hr = S_OK;
UINT er = ERROR_SUCCESS;
TCHAR sWord[100];
hr = WcaInitialize(hInstall, "AppendToApacheConfigFile");
ExitOnFailure(hr, "Failed to initialize");
TCHAR szActionData[MAX_PATH] = {0};
DWORD dActionDataLen = MAX_PATH;
MsiGetProperty (hInstall, TEXT("apacheconfpath"), TEXT(""), &dActionDataLen);
StringCbPrintf(sWord, 100, TEXT("%d"), dActionDataLen);
WcaLog(LOGMSG_STANDARD, "dActionDataLen = %s", sWord);
if (dActionDataLen > 0)
{
++dActionDataLen;
StringCbPrintf(sWord, 100, TEXT("%d"), dActionDataLen);
WcaLog(LOGMSG_STANDARD, "dActionDataLen(2) = %s", sWord);
MsiGetProperty (hInstall, TEXT("apacheconfpath"), szActionData, &dActionDataLen);
WcaLog(LOGMSG_STANDARD, "szActionData = %s", szActionData);
StringCbPrintf(sWord, 100, TEXT("%d"), dActionDataLen);
WcaLog(LOGMSG_STANDARD, "dActionDataLen(3) = %s", sWord);
//Do something with the value
}
LExit:
er = SUCCEEDED(hr) ? ERROR_SUCCESS : ERROR_INSTALL_FAILURE;
return WcaFinalize(er);
}
屬性在這裏設置在我們的WiX的安裝程序:
<CustomAction Id="AppendToApacheConfigFile_Cmd" Property="AppendToApacheConfigFile" Value="/apacheconfpath=test;" />
<CustomAction Id="AppendToApacheConfigFile" BinaryKey="CustomActionDll" DllEntry="AppendToApacheConfigFile" Execute="deferred" />
<InstallExecuteSequence>
<Custom Action="AppendToApacheConfigFile_Cmd" Before="AppendToApacheConfigFile"><![CDATA[IIS_SELECTED <> 1]]></Custom>
<Custom Action="AppendToApacheConfigFile" After="DeployPhpRuntime"><![CDATA[IIS_SELECTED <> 1]]></Custom>
</InstallExecuteSequence>
我已經增加了很多記錄的嘗試,看看發生了什麼。看起來該屬性永遠不會被讀取,因爲dword值始終爲0,並且數據始終爲空。我們永遠不會超過第一次閱讀。
根據日誌值已設置
MSI (s) (80:C4) [20:59:30:210]: Executing op: CustomActionSchedule(Action=AppendToApacheConfigFile,ActionType=1025,Source=BinaryData,Target=AppendToApacheConfigFile,CustomActionData=/apacheconfpath=test;)
的任何信息將是最歡迎
感謝。使用WCaGetProperty()的建議讓我更進一步。 – 2013-04-22 09:08:44
hr = WcaGetProperty(L「CustomActionData」,&pszActionData); – 2013-04-22 09:11:38
我現在得到CustomActionData的第一個字符現在 – 2013-04-22 09:12:21