2010-02-03 92 views
5

之前我有幾個應用程序,我在工作,想分發給需要微軟提供的.dll和或框架朋友。具體來說,XNA。我厭倦了從他們那裏收回電子郵件,說實際上它「崩潰」,所發生的只是他們沒有安裝XNA(或.NET 3.5,或其他)。但是,Main不能捕獲這些錯誤,因爲.exe在main執行前加載它們。所以,我的問題是,我將如何創建一個可以檢查.NET 3.5,XNA等事情的啓動程序,並顯示一個不錯的錯誤消息(「此應用程序需要XNA 3.0,請在此處下載! 「)而不是像它墜毀?檢查.NET依賴啓動

更新:我應該指定,我想這樣做不使用安裝程序。我有一個鍋爐板WIX安裝程序,它允許我檢查依賴關係,但有時我只想上傳一個zip供人們隨意使用。

回答

7

要做到這一點沒有一個安裝程序,您可能希望創建一個「啓動」腳本,做多一點進行任何相關性檢查前場後所說的「真正的」切入點。

由於缺失的依賴關係似乎是您非常常見的痛苦來源,因此可能建議您將啓動器編寫爲一些不需要依賴的東西,而這些依賴項不在裸Windows安裝中,例如作爲一個打包成可執行文件的AutoIt script

Const $AppTitle = 'Whizzy Game' 
Const $MB_ICONERROR = 16 

If RegRead('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5', 'Install') <> 1 Then 
    MsgBox($MB_ICONERROR, $AppTitle, 'The .NET Framework runtime v3.5 is required to run.') 
    Exit 1 
EndIf 

If RegRead('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\XNA\Framework\v3.1', 'Installed') <> 1 Then 
    MsgBox($MB_ICONERROR, $AppTitle, 'The XNA Framework runtime v3.1 is required to run.') 
    Exit 1 
EndIf 

Exit RunWait('WhizzySoftware.WhizzyGame.EntryPoint.exe') 
+0

看起來很不錯。你能給我一個AutoIt腳本的例子來檢查.NET 3.5嗎? – Jeff 2010-02-04 15:00:49

1

你可以爲應用程序創建一個安裝項目(其編譯成一個MSI安裝程序)。在此安裝程序的配置中,您可以設置必備條件,例如.NET Framework vX.X.我對XNA不太確定,但我認爲這也可以作爲先決條件。

+1

如果他們稍後卸載框架,但您的應用程序仍安裝?據我所知,.NET框架卸載程序不檢查是否有依賴它的應用程序。 – Nathan 2010-02-03 22:50:39

+0

@Nathan:如果你現在卸載.NET框架,你的機器上的應用程序會發生什麼?在我的機器上很多東西可能會破壞。我不認爲這是你的應用程序應該處理的事情。 – 2010-02-03 23:06:53

+0

@Andy:我希望應用程序不必處理它。但是,這裏的問題正是處理這種類型的問題(我也經歷過這種問題)。在安裝新版本之後,人們卸載舊版本的框架並不罕見。至少,在你的程序中有一個診斷程序來檢查錯誤發生時可用的版本是有用的。 – Nathan 2010-02-04 15:57:25