【问题标题】:Checking for .NET dependencies before launching在启动之前检查 .NET 依赖项
【发布时间】:2010-02-03 22:40:13
【问题描述】:

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

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

更新:我应该指定我想在不使用安装程序的情况下执行此操作。我有一个样板 WIX 安装程序,它允许我检查依赖项,但有时我只想上传一个 zip 文件供人们使用。

【问题讨论】:

    标签: .net xna


    【解决方案1】:

    要在没有安装程序的情况下执行此操作,您可能需要创建一个“启动器”脚本,该脚本仅在预先执行任何依赖项检查后调用“真实”入口点。

    由于缺少依赖项对您来说似乎是一个非常常见的痛苦来源,因此可能建议将启动器编写为不存在任何依赖项的东西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')
    

    【讨论】:

    • 看起来是个不错的选择。你能给我一个 AutoIt 脚本的例子,比如检查 .NET 3.5 吗?
    【解决方案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 包含关于检测和安装先决条件的部分。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 如果他们稍后卸载了框架,但您的应用仍然安装了怎么办?据我所知,.NET 框架卸载程序不会检查是否有依赖它的应用程序。
      • @Nathan:如果您现在卸载 .NET 框架,您计算机上的应用会发生什么情况?在我的机器上,很多东西可能会坏掉。我认为这不是您的应用必须处理的事情。
      • @Andy:我希望应用程序不必处理它。但是,这里的问题是处理这种类型的问题(我也经历过)。人们在安装新框架后卸载旧版本的框架并不少见。至少,在您的程序中进行诊断以在发生错误时检查哪些版本可用。
      猜你喜欢
      • 2021-12-07
      • 1970-01-01
      • 2011-04-12
      • 2013-10-05
      • 1970-01-01
      • 1970-01-01
      • 2011-09-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多