在启动之前检查.NET依赖项

时间:2010-02-03 22:40:13

标签: .net xna

我有几个应用程序,我工作并喜欢分发给需要Microsoft提供的.dll和/或框架的朋友。具体来说,XNA。我已经厌倦了从他们那里收回电子邮件说“它崩溃了”,而实际上发生的一切都是他们没有安装XNA(或.NET 3.5,或其他)。但是,Main无法捕获这些错误,因为.exe会在main执行之前加载它们。

所以,我的问题是,我将如何创建一个可以检查.NET 3.5,XNA等内容的启动器并显示一个很好的错误消息(“此应用程序需要XNA 3.0,请在此处下载!”而不是看起来像崩溃?

更新:我应该指定我想在不使用安装程序的情况下执行此操作。我有一个锅炉板WIX安装程序,允许我检查依赖性,但有时我只是想上传一个拉链供人们玩。

3 个答案:

答案 0 :(得分: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')

答案 1 :(得分:2)

这在安装过程中最容易完成。在您的安装包中加入Microsoft XNA Framework Redistributable

您可以使用MsiQueryProductState function来确定框架是否已安装。

或者你可以查看注册表:

[HKEY_LOCAL_MACHINE\Software\Microsoft\XNA\Framework\v3.1]
Installed=1

(此检查也可以在启动器应用程序中执行。)

Here's an article about distributing your game,其中有关于检测和安装先决条件的部分。

答案 2 :(得分:1)

您可以为您的应用程序创建一个安装项目(编译为MSI安装程序)。在此安装程序的配置中,您可以设置先决条件,例如.NET Framework vX.X.我对XNA并不十分确定,但我认为这也可以列为先决条件。