我正在使用wix / burn为某些MSI文件创建一个引导程序。 我用xml有效负载创建了标记:
<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 :(得分: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.");