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

为什么不是';当正确的.NET framework版本不存在时是否引发异常?,.net,version,.net,Version,我们有一个针对.NET3.5的.NET应用程序。我们的客户机从共享驱动器(很少)运行它,以便有一个中央配置文件位置 我们注意到,如果工作站访问共享驱动器并运行程序,但没有安装.NET 3.5,则不会发生任何事情,没有错误,没有异常,没有日志条目,它不会启动 为什么没有显示错误消息 在windows中通过CLR 有什么东西我可以放在桌子上吗 代码的开头将 确保发送了正确的错误消息 展示 它不是一个选项来运行一个安装程序来检查prereq,因为我们只在一个中心位置安装它 谢谢 理想情况下,我们

我们有一个针对.NET3.5的.NET应用程序。我们的客户机从共享驱动器(很少)运行它,以便有一个中央配置文件位置

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

  • 为什么没有显示错误消息 在windows中通过CLR

  • 有什么东西我可以放在桌子上吗 代码的开头将 确保发送了正确的错误消息 展示

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

谢谢



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

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

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


另外,您通常不能在网络共享上运行.NET应用程序,因为它是一个“不受信任的位置”,而且我过去总是遇到一个安全异常。

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


试试下面的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 --------------------------- --------------------------- moreverfoo.exe-.NET Framework初始化错误 --------------------------- 要运行此应用程序,您必须首先安装以下程序之一 .NET Framework的版本: v3.5 请与应用程序发布者联系,以获取有关获取 适当版本的.NET Framework。 --------------------------- 好啊 ---------------------------
如果一台计算机安装了.NET 3.5 SP1(您的开发计算机可能会这样做),那么您可以从网络共享运行.NET应用程序,它将正常运行,并具有完全信任。但这在最初的3.5版本中甚至都不是真的。在3.5 SP1之前,如果您尝试从网络共享运行应用程序,它将以受限权限运行

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

  • 当您将EXE复制到这些机器上的本地硬盘并从那里运行时会发生什么
  • 如果应用程序在启动时出现安全异常,会发生什么情况?您自己的代码是否以某种方式屏蔽了异常

具体回答您的问题:

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

  • 同样没有。在应用程序被管理之前,在应用程序启动时没有运行的非托管代码/存根,因此无法预先检查框架的正确版本


因此,引导程序或包装器是您唯一的选择,或者您可以查看一个单击一次的应用程序类型,看看是否可以使用它强制实现(正确框架的)先决条件。

它似乎在默默地吞下它。网络共享似乎不是一个问题,这取决于客户端,用户将得到提示它不受信任,但他们仍然能够启动它。.从网络共享运行的NET应用程序与本机应用程序具有相同的行为,因为从.NET 3.5 SP1开始,它以完全信任的方式运行,请看这是一个好主意,我想我真正想要的是,为什么在任何地方都没有错误,我觉得奇怪的是程序会无声地失败。我没有意识到我会因为失去网络共享而遇到这些问题。