2015-10-20 82 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."); 
相关问题