2013-05-13 95 views
1

我的安裝程序需要重新分配.NET框架,但我不想有一個setup.exe包裝,所以我寫了一個自定義操作來啓動.NET的Web安裝程序最終用戶機器尚未擁有它。這適用於.NET 4.0和.NET 3.5,但對於.NET 4.5,.NET安裝程序報告「等待另一個安裝完成」並失敗 - 如果我的自定義操作位於Exec序列中,此錯誤消息將正確我特別將它放在UI序列的早期,以允許嵌套安裝。InstallShield與.NET 4.5嵌套安裝

完全相同的配置的InstallShield /代碼工作正常使用.NET 3.5和.NET 4.0,但失敗,.NET 4.5,我使用的是微軟的標準Web安裝程序: http://www.microsoft.com/en-ca/download/details.aspx?id=30653

有誰知道任何解決方案還是解決這個問題?

下面是我的自定義操作的代碼:我很驚訝,.NET 4.0和3.5也不像這個工作

if (hasDotNET45 = FALSE) then 
    MessageBox("Missing .NET 4.5 framework!", INFORMATION); 
    LAAW_SHELLEXECUTEVERB = "runas"; 
    LaunchApplication(szSupportDir^"\\dotNetFx45_Full_setup.exe", "", "", SW_SHOWNORMAL, 100000, LAAW_OPTION_USE_SHELLEXECUTE | LAAW_OPTION_WAIT_INCL_CHILD); 
    Delay(333); 
endif; 

回答

2

解決的辦法是先提取.NET 4.5安裝程序可執行的使用命令的內容: dotnetfx45_full_x86_x64.exe/X

然後我可以使用自定義操作在我的UI順序調用。在.NET安裝程序的MSI版本(無它的setup.exe包裝!)

MSIEXEC.EXE/I netfx_Full_x64.msi EXTUI = 1/L * v「Install.log記錄」

這充分解決了我原版的 題。

+1

自定義操作那叫一個msi是janky ...你想鏈msis – thekbb 2013-12-14 04:12:54

+0

如何鏈msis? – godblessfq 2015-11-29 16:45:29

+0

如前所述,MSIs不應該(不容易)嵌套。但由於某些原因,許多人從用戶序列中啓動了prereq MSI,而且這種方式通常很好。如果這是「嵌套」,取決於觀點。主要的缺點是你無法靜靜地運行這個設置 - 你依賴於確切的對話模式。如果這是可以接受的,我看不出有什麼理由要告訴所有人,這很糟糕 - 這很容易,而且很有效。只有像.NET 4.5這樣的一些設置不僅測試常見的MSI互斥量,還有更多。所以這裏需要解壓縮這個解決方法。 – Philm 2016-02-15 10:39:20

2

;啓動一個可能在MSI安裝程序中使用MSI作爲自定義操作的安裝程序是一個壞主意。

如果您想確保存在.Net4.5(或任何其他軟件),您需要在啓動安裝程序ala Setup/Feature Prerequisites in Installshield之前將其鏈接起來,或者使用LaunchCondition表來防止安裝程序在環境中繼續不符合要求。

+0

它可以在少數情況下工作,例如從提升的命令會話運行的完全交互式安裝,並且自定義操作在UI序列中計劃。這打破了所有最佳實踐,所以顯然不是這樣。您提到的套件安裝程序或安裝程序必備軟件是正確的方法。 – 2013-05-15 14:19:25

+0

我一直在使用這種自定義操作方法來部署我的應用程序Prereqs一段時間,並且從來沒有任何問題由最終用戶報告,那麼爲什麼這是「打破所有最佳實踐」呢? – 2013-05-16 15:12:45

+0

此鏈接描述Microsoft最佳做法,並特別提到此:http://msdn.microsoft.com/en-us/library/windows/desktop/bb204770(v=vs.85).aspx#concurrent_installs – NGaida 2013-05-16 16:37:50

相關問題