2015-10-20 59 views
0

我正在使用wix/burn爲某些MSI文件創建引導程序。 我創建的標記與XML有效載荷:如何將路徑傳遞到包的有效載荷到msi?

<BootstrapperApplicationRef ...> 
    <Payload Id="myXML" Compressed="yes" SourceFile="c:\my.xml" /> 
</BootstrapperApplicationRef> 

問:我如何通過這個有效載荷的路徑的MsiPackage?

<MsiPackage ...> 
    <MsiProperty Name="XMLFILE" Value="[what do I use?]" /> 
</MsiPackage> 

我也有興趣在將它傳遞給msi之前編輯該文件。爲此,我正在使用bafunctions.dll。但我不知道如何獲得bafunctions.dll的有效負載路徑(C++代碼)。我嘗試了GetModuleFileName(),但它給了我原始的包路徑,如c:\ users \ alex \ desktop \ bundle.exe,而不是解壓縮所有內容的臨時文件夾。

回答

0

我居然找到了一種方法來做到這一點:

在bafunction.dll,我們可以使用GetModuleFileName()來獲得實際加載的DLL的路徑,而不是EXE:

//define this in your compilation unit (cpp) 
EXTERN_C IMAGE_DOS_HEADER __ImageBase; 

然後寫一個函數來獲取dll路徑:

WCHAR DllPath[MAX_PATH] = {0}; 
GetModuleFileNameW((HINSTANCE)&__ImageBase, DllPath, _countof(DllPath)); 

這會給你的完整路徑bafunctions.dll,但其他有效載荷在同一個文件夾中。所以這只是解析這個字符串的問題。

獲得路徑後,您可以創建一個自己的刻錄變量,該變量也可以在xml標記中引用。

hr = m_pEngine->SetVariableString(L"MyXmlPath", myxmlpath.c_str()); 
BalExitOnFailure(hr, "Failed to set variable MyXmlPath."); 
相關問題