2010-02-03 74 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