(Windows)程序无法在特定计算机上运行

(Windows)程序无法在特定计算机上运行,windows,Windows,当尝试在Windows Server 2008 R2(x64)上运行我的可执行程序时,它会立即失败,Windows会说“程序(x64)已停止工作”。 相同的可执行文件可以在许多其他机器上工作。 甚至在具有相同操作系统的其他机器上 该程序在文件夹中有自己的DLL。 即使它需要其他不存在的DLL,我想系统会这么说吗 以下是Windows事件查看器的输出: Faulting application name: dscp.exe, version: 19.0.0.398, time stamp: 0x5

当尝试在Windows Server 2008 R2(x64)上运行我的可执行程序时,它会立即失败,Windows会说“程序(x64)已停止工作”。 相同的可执行文件可以在许多其他机器上工作。 甚至在具有相同操作系统的其他机器上

该程序在文件夹中有自己的DLL。 即使它需要其他不存在的DLL,我想系统会这么说吗

以下是Windows事件查看器的输出:

Faulting application name: dscp.exe, version: 19.0.0.398, time stamp: 0x5d8b42ef
Faulting module name: VERSION.dll_unloaded, version: 0.0.0.0, time stamp: 0x4a5be082
Exception code: 0xc0000005
Fault offset: 0x000007fefbcc15b4
Faulting process id: 0x1db4
Faulting application start time: 0x01d5744a0d493693
Faulting application path: C:\TEMP\DebugW\dscp.exe
Faulting module path: VERSION.dll
Report Id: 50adb64b-e03d-11e9-a7b2-000c29b302dd
我查找了VERSION.dll,它似乎是一个Windows系统dll


我不知道如何调试这个问题。

第一个明显的步骤是使用调试器查看发生了什么。堆栈跟踪有望指示程序的哪一行导致了问题。看起来您正在调用一个已卸载的DLL。@Raymond Chen,问题是我无法在此计算机上安装VS,而且我也无法进行远程调试,因为进程立即退出,因此没有可附加的内容。像ntsd这样的轻量级调试器怎么样?您可以将其作为实时调试器安装,也可以通过映像文件执行选项安装,以便它始终针对特定进程运行。也许你可以要求Windows错误报告生成转储文件。谢谢,我不知道这些可能性。我现在得到了一个带有Windows错误报告的dmp文件,但是堆栈非常浅并且没有帮助:
>000007fefbcc15b4()未知000007fe00000000()未知
,这是因为代码已卸载。您必须重新构建堆栈,使其再次出现代码,或者加载已卸载DLL的符号,以便调试器可以跟踪它。如果这是在VERSION.dll内部的函数调用的中间,那么您可以查看是否有其他线程正在调用FreeLibrary来从该线程下释放库。你只需要对你拥有的工具和线索有创造性。第一个明显的步骤是使用调试器来查看发生了什么。堆栈跟踪有望指示程序的哪一行导致了问题。看起来您正在调用一个已卸载的DLL。@Raymond Chen,问题是我无法在此计算机上安装VS,而且我也无法进行远程调试,因为进程立即退出,因此没有可附加的内容。像ntsd这样的轻量级调试器怎么样?您可以将其作为实时调试器安装,也可以通过映像文件执行选项安装,以便它始终针对特定进程运行。也许你可以要求Windows错误报告生成转储文件。谢谢,我不知道这些可能性。我现在得到了一个带有Windows错误报告的dmp文件,但是堆栈非常浅并且没有帮助:
>000007fefbcc15b4()未知000007fe00000000()未知
,这是因为代码已卸载。您必须重新构建堆栈,使其再次出现代码,或者加载已卸载DLL的符号,以便调试器可以跟踪它。如果这是在VERSION.dll内部的函数调用的中间,那么您可以查看是否有其他线程正在调用FreeLibrary来从该线程下释放库。你只需要用你拥有的工具和线索来创造。