2015-10-20 2 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 нагруженного, не ех:

//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."); 
Смежные вопросы