C ++自定义操作返回空字符串(C++ Custom Action returns empty st

2019-08-31 16:43发布

我们正与C ++中的递延自定义操作的问题。 我们只是想为CustomActionData属性“apacheconfpath”具有测试此刻虚值,该值。

下面是我们的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;)

任何信息将是最欢迎

Answer 1:

当递延自定义操作请求数据通过其著名的标识要求它CustomActionData 。 你可以看到在此行的最后日志文件中引用该名称:

MSI (s) (80:C4) [20:59:30:210]: Executing op: CustomActionSchedule(Action=AppendToApacheConfigFile,ActionType=1025,Source=BinaryData,Target=AppendToApacheConfigFile,CustomActionData=/apacheconfpath=test;)

要访问数据,你会改变你的MsiGetProperty调用看起来更像:

MsiGetProperty(hInstall, TEXT("CustomActionData"), TEXT(""), &dActionDataLen);

注:由于您已经使用wcautil,我强烈建议使用WcaGetProperty()而不是MsiGetProperty() 你会想从检查返回代码WcaGetProperty()并在此过程中您的自定义操作将正确处理用户取消。 否则,你的自定义操作可能会吞下用户尝试取消安装。



文章来源: C++ Custom Action returns empty string
标签: c++ wix