代码之家  ›  专栏  ›  技术社区  ›  Nate Heinrich

当不存在正确的.NET framework版本时,为什么不引发异常?

  •  6
  • Nate Heinrich  · 技术社区  · 16 年前

    我们注意到,如果工作站访问共享驱动器并运行程序,但没有安装.NET3.5,则不会发生任何事情,不会出现错误、异常和日志条目,它不会启动。

    • 在windows的CLR旁边?

    • 有什么我可以放在桌子上的吗 确保显示正确的错误消息

    它不是一个选项来运行一个安装程序来检查prereqs,因为我们只在一个中心位置安装它。


    理想情况下,我们不必使用包装器来查询.NET版本,程序似乎无法启动,windows应该在某个地方报告这一情况。我不敢相信它会默默地失败。

    6 回复  |  直到 16 年前
        1
  •  10
  •   user287466 user287466    16 年前

    尝试类似于you app.config的操作;

    <configuration>
        <startup>
            <supportedRuntime version="v3.5" />
        </startup>
    </configuration>
    

    ---------------------------
    moreverfoo.exe - .NET Framework Initialization Error
    ---------------------------
    To run this application, you first must install one of the following 
    versions of the .NET Framework:
      v3.5
    Contact your application publisher for instructions about obtaining the 
    appropriate version of the .NET Framework.
    ---------------------------
    OK   
    ---------------------------
    
        2
  •  1
  •   Paya    16 年前

    我想你可以在C++中创建应用程序,它将检查是否安装了所需的.NET。如果没有,则显示messagebox,如果已安装,应用程序将从共享驱动器运行所需的程序。

        3
  •  1
  •   SqlRyan    16 年前

    当应用程序不启动时,事件日志中是否有任何条目?很难相信,尽管我认为这并非不可能,但它会默默地完全失败。也许您的应用程序实际上是在加载第一个窗体之前生成了一个异常,悄悄地将其吞下(空catch块),然后退出,所有这些都没有任何类型的日志记录或错误消息。

        4
  •  1
  •   Joe White    16 年前

    如果一台机器安装了.NET3.5SP1(就像您的开发机器可能安装的那样),那么您可以从网络共享运行一个.NET应用程序,它将在完全信任的情况下正常运行。但这是 new in 3.5 SP1 --在最初的3.5版本中甚至都不是这样。在3.5 SP1之前,如果您尝试从网络共享运行应用程序,它将以受限权限运行。

    因为这些机器没有3.5版本,所以他们肯定没有3.5SP1版本。因此,你的应用程序将无法执行诸如打开文件或对非托管代码进行P/Invoke之类的操作。如果它尝试,您将得到安全异常。

    • 当您将EXE复制到这些机器上的本地硬盘上并从那里运行时会发生什么?
        5
  •  0
  •   Community Mohan Dere    9 年前

    与直接发布可执行文件不同,您可以创建一个批处理文件,首先检查是否安装了正确版本的.NET(请参见下面的链接),然后启动应用程序并关闭控制台窗口,或者显示错误消息并暂停。

    Is there a command line command for verifying what version of .NET is installed

        6
  •  0
  •   slugster Joey Cai    16 年前

    具体回答您的问题:

    • 不可以。问问你自己这个问题:如果框架的要求级别不存在,那么应该允许(或使)哪个版本的CLR显示错误消息?

    • 也不是。在你的应用程序被管理之前,在它开始运行的时候没有未被管理的代码/存根,所以没有办法预先检查框架的正确版本。

    推荐文章