.net程序在用户计算机上启动时崩溃,但在开发工作站

时间:2016-11-07 17:17:35

标签: .net vb.net crash filenotfoundexception

我们最近完成了一个VB.Net应用程序,但在部署之后遇到了困难。

当我在我的计算机(或安装了Visual Studio的任何其他工作站)上运行它时,它运行正常。出现闪屏,提示输入数据库信息,然后显示主屏幕。当它在任何其他工作站上运行时,它会在启动时崩溃。出现闪屏,片刻之后,Windows通知我们“EP.exe已停止工作”

我查看了事件日志和错误报告,我能够提取的唯一有用信息是致命错误System.IO.FileNotFoundException。这对我没有帮助 - 它没有说明找不到什么文件,并且EP直到很久以后才触及文件系统。 (两个表单深入主菜单;选择要导入的文件后)。

什么可能导致此错误?
如何判断缺少哪个文件?
我在哪里放置文件,以便.Net可以在客户端工作站上找到它?

编辑:我跟着the instructions that @Visual-Vincent linked,但不认为我发现任何有用的东西。反汇编之后,错误发生在方法0x060004ac(服务器名称表单的构造函数,完全由Visual Studio编写)中,特定行导致错误(IL_0037)为ldarg.0(据我所知,只是将一个参数推到堆栈上)。之前和之后的语句分别是nop和InitializeComponent()。

edit2:在阅读MSDN article on Unhandled Exceptions后,我能够得到.Net来向我展示致命异常的细节(“无法加载文件或程序集Microsoft.VisualBasic.PowerPacks.Vs ......”)这是我认为我可以做些什么。
* 疯狂地输入 *

2 个答案:

答案 0 :(得分:1)

在追踪AppDomain.UnhandledException链接到Vincent后,我能够让应用程序在用户工作站上运行。

    Dim currentDomain As AppDomain = AppDomain.CurrentDomain
    Sub MyHandler(sender As Object, args As UnhandledExceptionEventArgs)
        Dim e As Exception = DirectCast(args.ExceptionObject, Exception)
        MsgBox(e.Message)
    End Sub
...
    Public Sub Main()
        AddHandler currentDomain.UnhandledException, AddressOf MyHandler
...

原来Visual Studio期望Power Pack安装在客户端计算机上。在对Microsoft.VisualBasic.PowerPacks.Vs的引用上添加“复制本地”(并将DLL部署到客户端工作站)后,应用程序现在可以正常工作。

答案 1 :(得分:0)

您可以使用Process Monitor来解决此类问题。查找有"未找到路径的文件"和"名称未找到"。这可能经常发生,因为Windows可能无法立即找到该文件,然后尝试%PATH%中的所有内容。因此,您需要查找具有"未找到路径的文件"或"未找到姓名"并没有"成功"以后。

这个过程有点困难,但我写了一个名为ProcMon Log Analyzer的工具,可以帮到你。只需将Process Monitor日志另存为XML并将其传递给该工具即可。它会告诉你缺少的DLL的名称。