【问题标题】:.NET applications sometimes crash right at application startup (can't access .exe).NET 应用程序有时会在应用程序启动时崩溃(无法访问 .exe)
【发布时间】:2013-12-10 08:38:31
【问题描述】:

我们目前在我们的一台客户计算机上遇到以下软件行为:


短版:

我们的 .NET 应用程序有时在从客户端执行时会立即崩溃,可执行文件位于单独的文件服务器上。

发生这种情况时,事件日志中的一条消息声称无法访问可执行文件。但是桌面快捷方式总是会找到可执行文件。

请注意,这发生在几个不同的 .NET 可执行文件上。

这导致我们如下


问题:

windows如何总是访问可执行文件(进程在崩溃时在任务管理器中可见)但.NET框架有时只能访问它?请注意,我们的客户有时会因未知原因出现网络问题。
而且,更重要的是,我们能做些什么来防止崩溃,或者至少在这种情况下显示一个自己的消息框?

欲了解更多信息,请阅读以下内容:


详细信息:

我们的 C# 可执行文件位于虚拟化文件服务器 (Windows Server 2003) 上,并使用 .NET 3.5 SP1 编译。

当尝试从同一网络中的客户端使用桌面/开始菜单快捷方式执行软件时,可执行文件有时(大约是尝试次数的 2-5%)崩溃,即用户收到“ 遇到错误,需要关闭”消息。作为参考,客户端也安装了.NET 3.5 SP1。

进一步的调查表明,在我们执行一行代码之前,程序就崩溃了(即从未到达 main() 方法)。

在 Windows 事件日志中,有两条消息,第一条相对无用(德语免费翻译):

应用失败,版本 0.0.0.0,失败模块未知,版本 0.0.0.0,失败地址 0x79002c42。

第二个是这样说的:

由于以下原因之一,无法访问文件\\\\.exe:网络连接有问题,存储文件的驱动器分别是安装在计算机上的磁盘驱动程序,或者驱动器丢失。由于此错误,程序 .exe 已关闭。

[关于如何做的一些建议]

更多信息:
错误代码:C0000008
驱动器类型:4

现在第一个建议是尝试再次打开文件,因为这种情况可能是暂时的问题。 虽然这种“解决方案”有效,但出现应用程序崩溃消息是不可接受的,尤其是当我们的一个可执行文件调用另一个可执行文件时。

如果您无法直接回答上述问题,但您知道如何进一步调查,请随时发表评论或回答。但是请注意,我们不允许在我们的客户客户端甚至服务器上安装任何类型的第三方软件。可以使用便携式应用程序(更准确地说是可以复制/粘贴到单个文件夹中并且不会将任何类型的文件部署到该单个文件夹之外的任何位置的软件)。

【问题讨论】:

  • 您的 EXE 是否需要任何可能导致崩溃的依赖项(初始化时)?当EXE是本地的时会发生这种情况吗?有时启动一个 EXE 而另一个 EXE(相同或不同)正在启动会导致奇怪的行为(一些间接依赖问题)...
  • 这闻起来像网络管理问题。您的 SA 可能在操作系统启动时运行了一些批处理脚本,并且在某些情况下,您的程序开始查询网络资源之前实际上脚本设置了所有请求的权限。
  • 即使服务器运行了几天,客户端运行了几个小时,问题仍然存在
  • @Tigran 的标题和第一段可能具有误导性,我在考虑应用程序启动而不是客户端/服务器启动。我更清楚地重写了这些部分。

标签: c# .net .net-3.5


【解决方案1】:

如果是我,我会首先看看我是否可以在本地重新创建问题并完全消除网络。这一切都是为了建立线索,希望能让你更接近解决方案。其他可能值得考虑的事情是:

  1. 32 位与 64 位,您的编译目标是什么?
  2. 服务器上是否正在运行任何时髦的脚本?
  3. 它在不同服务器上的行为方式是否相同?
  4. 也许尝试从服务器中删除 .NET 框架,然后 重新安装它
  5. 确保事件日志中没有任何其他错误来自 系统的其他部分
  6. 服务器上是否有任何防火墙或防病毒软件可能 干扰应用程序
  7. 我还会在服务器上运行内存测试器,可能还会 chkdsk 但这只是一个一般性的事情,可以消除,当然不会有坏处
  8. 我什至会换掉网络领导(极不可能是这个)
  9. 尝试将应用程序放在不同的 UNC 共享上,看看您是否 可以从那里重新创建它

淘汰过程是游戏的名称,即使是最不可能的候选人也不应被忽视。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-02
    相关资源
    最近更新 更多