如何将包的有效负载的路径传递给 msi?
How to pass the path to a bundle's payload to an msi?
我正在使用 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,而不是解压所有内容的临时文件夹。
我居然找到了方法:
在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.");
我正在使用 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,而不是解压所有内容的临时文件夹。
我居然找到了方法:
在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.");