2016-03-08 124 views
4

我有一個使用InstallShield Premium 2012爲我自己的Windows EXE編寫的安裝腳本。但是,我的EXE最終依賴於Microsoft EXE提供的狀態組件,這些組件稱爲AccessDatabaseEngine 。可執行程序。MSI錯誤1500:InstallShield高級版無法運行輔助嵌入式安裝EXE

爲了運行此AccessDatabaseEngine.exe可執行文件我的安裝,我增加一條,作爲一個嵌入二進制資源再使用的自定義操作嚮導發動AccessDatabaseEngine.exe爲「系統上下文延遲執行」作爲「後PublishFeatures」安裝Exec序列。這按預期工作:安裝完成大部分工作後,AccessDatabaseEngine.exe將啓動。

但是,一旦我看到AccessDatabaseEngine.exe的UI並確認其UI提示,我會看到「錯誤1500」,表示正在進行其他安裝。

我知道兩個MSI軟件包不能同時運行,除非您調整註冊表以允許它,而我不想在我的客戶的工作站(Windows 7 32位計算機)上執行此操作。

我想成功地實施這些選項之一:

方案一:讓用戶推出我的Setup.exe程序,它會在某個時候推出微軟AccessDatabaseEngine.exe,而不會產生任何錯誤消息。我只是不知道如何做到這一點,而不會導致錯誤1500出現...

選項2:如果可以以某種方式將我的Setup.exe與Microsoft的AccessDatabaseEngine.exe一起包裝到一個EXE中,那麼我可以爲我的最終用戶提供單一的EXE,並且它將首先執行嵌入式Setup.exe,一旦完成,它將執行AccessDatabaseEngine.exe。

我意識到,我可以實現選項二作爲.BAT(批處理)文件,但我希望提供只有一個EXE到我的最終用戶和有一個單一的EXE安裝我的軟件正常運行所需的一切。

任何想法?

回答

0

顯然,有兩個設置決定一個必備條件是否在它自己的獨立文件夾(包含setup.exe的文件夾下面的發佈文件夾),或者它被嵌入到單個setup.exe文件中。

第一個設置位於Installation Designer下的Application Data |交付。在列出的PRQ先決條件中選中一個複選標記,右鍵單擊它並查看屬性。您將看到一個Build Location下拉菜單 - 其中一個選項是Extract From Setup.exe。這就是我設定的方式。

但是接下來是SECOND設置,這在Installation Designer的Media部分的Release下。在我的項目中,我有一個發佈根目錄,然後是一個PROJECT_ASSISTANT分支,然後是一個SINGLE_EXE_IMAGE分支。我左鍵單擊SINGLE_EXE_IMAGE並查看其屬性表。在該列表中,靠近列表底部的條目表示設置先決條件位置。雙擊右列(列出其值),您將在那裏看到一個選擇,也表示從Setup.exe解壓縮。

第二個設置忽略可交付成果部分中指定的設置,這就是爲什麼它不像先決條件設置中指定的那樣工作。這是因爲我正在使用「從源媒體複製」設置。

因此,如果您有多個先決條件,並且您希望所有這些都包含在setup.exe中,那麼可以使用Extract From Setup.exe設置。但是,如果您希望配置先決條件的最終位置,請選擇發佈的「安裝先決條件位置」部分中的「遵循單個選擇」選項,然後確保您已爲每個先決條件選擇了正確的選項。

即使其他人曾經在前面的答案中提出過這樣做,但這些解釋對我而言並不清楚,而且在最終發現實際發生的事情之前,我浪費了很多時間。

2

這裏描述的正是InstallShield的先決條件的設計目的。從「工具」菜單啓動先決條件編輯器,並添加攜帶,安裝和檢測AccessDatabaseEngine.exe的已安裝足跡的文件,命令行和條件;然後使用可再分發視圖將新的先決條件包含在您的項目中。

正確完成此操作後,InstallShield的安裝程序啓動程序將檢查是否存在先決條件佔用空間,如果不存在,它將按所述運行先決條件。由於這是在啓動主.msi文件之前完成的,因此它避免了同時安裝兩個.msi文件。

Defining InstallShield PrerequisitesCreating an InstallShield Prerequisite,並Setting Installation Conditions for an InstallShield Prerequisite在幫助更多的細節。要確定最終在您的內置安裝程序中的位置,請參見Specifying the Run-Time Location for InstallShield Prerequisites at the Release LevelSpecifying a Run-Time Location for a Specific InstallShield Prerequisite。請注意,添加先決條件的依賴關係時,它們通常使用發佈級別設置,因此除非您確實需要混合位置,否則最好在發佈中指定此設置。

+0

謝謝 - 這是一個可以接受的解決方案,但AccessDatabaseEngine.exe作爲單獨的EXE結束在一個文件夾中(理想情況下)我想要一個沒有外部依賴關係的Setup.exe;另外,我的Setup.exe(直接編輯器| ISRelease |密碼列)上有一個密碼,在出現Setup.exe之前出現密碼提示,然後在啓動先決條件AccessDatabaseEngine.exe之前再次出現密碼提示(理想情況下,我希望提示pw提示符只出現一次)。在這一點上,我會打開一個第三方工具,如果存在這樣的工具,可能會將Setup.exe和該文件夾與其他exe文件一起打包。 – Jazimov

+0

我不確定密碼,但對於外部文件,您可以在可再發行組件視圖的右鍵單擊屬性或發行版視圖中的發行配置中設置位置。 –

+0

就外部文件而言,可再分發屬性讓您選擇本地路徑或Web位置(由於客戶端防火牆和代理限制,這對我來說不是一種選擇);發佈配置允許我更改AccessDatabaseEngine.exe的名稱/位置,但我看不到嵌入它的方法。理想情況下,我想將AccessDatabaseEngine.exe作爲二進制資源添加,然後讓安裝程序提取它,以便它可以作爲先決條件執行它。這可以讓我提供一個setup.exe文件給我的客戶端。 – Jazimov