代码之家  ›  专栏  ›  技术社区  ›  glenneroo Menyus777

WiX-将参数传递给CustomAction(DLL)

  •  5
  • glenneroo Menyus777  · 技术社区  · 16 年前

    我已经从一个旧的明智的安装程序,我正试图在WiX工作的DLL,所以我很肯定的DLL与基于MSI的安装工作。

    以下是我的定义:

    <Binary Id="SetupDLL" SourceFile="../Tools/Setup.dll" />
    <CustomAction Id="ReadConfigFiles" BinaryKey="SetupDLL" DllEntry="readConfigFiles" />
    

    使用方法:

    <Publish Dialog="InstallDirDlg" Control="Next" Event="DoAction" Value="ReadConfigFiles" Order="3">1</Publish>
    

    extern "C" UINT __stdcall ReadConfigFiles(MSIHANDLE hInstall, CHAR * szDirectory)
    

    1 回复  |  直到 16 年前
        1
  •  6
  •   i_am_jorf    16 年前

    不能直接传递参数,因为要使其正常工作,必须以正确的封装外形导出函数。当你打电话的时候 readConfigFiles

    extern "C" UINT __stdcall readConfigFiles(MSIHANDLE hInstaller);
    

    你可以用 hInstaller 参数从MSI读取属性。使用 MsiGetProperty() :

    HRESULT GetProperty(MSIHANDLE hInstaller, LPCWSTR property, LPWSTR value, DWORD cch_value) {
        UINT err = MsiGetProperty(hInstaller, property, value, &cch_value);
        return (err == ERROR_SUCCESS ? S_OK : E_FAIL);
    }
    

    然后确保在.wxs文件中设置属性:

    <Property Id="YOUR-PROPERTY-NAME">your-property-value</Property>