2017-03-20 44 views
0

是否可以從自定義操作中獲取啓動MSI安裝的可執行程序包(aka bootstrapper)的路徑?從運行MSI包獲取「setup.exe」的路徑

獲取父進程的DLL的常規方式將無法正常工作,因爲自定義操作DLL由「msiexec.exe」而不是由bootstrapper.exe加載。 「msiexec.exe」的父進程是「services.exe」,因此也無濟於事。

Msiexec.exe的似乎知道有關調用過程,因爲它寫這行到日誌文件:

=== Verbose logging started: [blah...] Calling process: C:\temp\testsetup.exe === 

我找不到任何API來查詢,雖然這一信息。我看着property referenceinstaller functions

+0

哪些是您使用建立你的setup.exe,MSI工具?大多數人會這樣做,但他們並不完全相同。 – PhilDW

+0

「setup.exe」是用C++編寫的自定義應用程序,MSI是通過[python msilib](https://docs.python.org/2/library/msilib.html)構建的。我無法修改其中任何一個,因爲我只是提供了一個合併模塊。我需要讀取一些附加到「setup.exe」的數據。 – zett42

回答

0

假設您的setup.exe與MSI文件位於同一位置,SourceDir屬性會告訴您安裝MSI的文件夾。 OriginalDatabase屬性告訴你MSI文件的完整路徑。

https://msdn.microsoft.com/en-us/library/windows/desktop/aa371857(v=vs.85).aspx

如果SETUP.EXE實際啓動從衆所周知的位置MSI文件,它可能是其他標準的性能,如TempFolder之一。但沒有理由不能將文件夾傳遞到MSI安裝。如果你在你的MSI中聲明瞭一個名爲MYFOLDER的公共安全屬性,那麼只需使用命令行啓動MSI,包括MYFOLDER = [路徑名]

我假設你知道如何從自定義操作中獲取屬性值。

從可能從中刪除的臨時位置安裝MSI不是一個好主意。該建議是保持MSI可用,第31條:

https://blogs.msdn.microsoft.com/windows_installer_team/2006/05/24/tao-of-the-windows-installer-part-3/

+0

_假設你的setup.exe和你的MSI文件位於同一個位置_ - 不幸的是它不是。 setup.exe是一個自解壓縮的可執行文件,可將MSI文件解壓縮到臨時目錄中。 – zett42