2013-07-30 114 views
2

假設,我有以下文件夾結構:的InstallShield:使用LaunchAppAndWait()與相對路徑

C:\測試\ SETUP.EXE(這是主安裝發射器)

C:\測試\特徵1 \ SETUP.EXE(特徵1的安裝)

C:\測試\特點2 \ SETUP.EXE(特徵2的安裝)

我在主安裝啓動器中創建了自定義的InstallShield對話框,用戶可以點擊相應的按鈕並運行Feature1或Feature2的安裝。我用InstallScript LaunchAppAndWait()函數來做。所以,我的問題是 - 我怎樣才能使用相對路徑呢?

例如:

LaunchAppAndWait("c:\\Test\\Feature1\\setup.exe", "", LAAW_OPTION_WAIT) - it works. 
LaunchAppAndWait("Feature1\\setup.exe", "", LAAW_OPTION_WAIT) - doesn't work. 

回答

1

首先,對於這樣的情況,我通常會建議創建一個套件/高級UI項目。一旦你這樣做了,你可以直接關聯包(你包含的setup.exe文件,例如,底層的.msi或.hdr文件是更好的選擇)與你正在安裝的套件的功能。

但是,假設對於您來說變化太大或者出於某種其他原因不適合,您應該能夠創建一個絕對路徑來調整您的設置運行的位置。通過參考PACKAGE_LOCATION(如果這是一個InstallScript包裝程序項目)或SETUPEXEDIR(如果這是基本MSI或InstallScript MSI包裝程序項目)來實現。假如是前者,它會是這個樣子:

LaunchAppAndWait(PACKAGE_LOCATION^"Feature1\\setup.exe", "", LAAW_OPTION_WAIT); 

對於後者,最後一步將外觀相似,但你必須先檢索使用MsiGetProperty的的SETUPEXEDIR值。

+0

謝謝你,邁克爾。我的項目類型是基本MSI,所以MsiGetProperty(hMSI,「SETUPEXEDIR」,...)解決了我的問題。 – AndreyS