.net BSOD on process.start with process.getprocesss

.net BSOD on process.start with process.getprocesss,.net,vb.net,.net,Vb.net,首先,有一点背景:我有一个程序,作为一个实验室设备的前端。实验室设备附带的软件具有TCP/IP接口,在我正在开发的应用程序后面的后台运行。另外,windows XP/visual studio 2008/.net 3.5 我遇到的问题是,如果我尝试使用process.start(“PROG-XY.exe”)从程序内部启动OEM软件,我会得到一个BSOD(错误检查0xF4:关键对象终止) 捕获的是BSOD只有在我事先运行Process.getProcessByName(“不管这个字符串是什么”)时

首先,有一点背景:我有一个程序,作为一个实验室设备的前端。实验室设备附带的软件具有TCP/IP接口,在我正在开发的应用程序后面的后台运行。另外,windows XP/visual studio 2008/.net 3.5

我遇到的问题是,如果我尝试使用process.start(“PROG-XY.exe”)从程序内部启动OEM软件,我会得到一个BSOD(错误检查0xF4:关键对象终止)

捕获的是BSOD只有在我事先运行Process.getProcessByName(“不管这个字符串是什么”)时才会发生。(它将用于查找进程,如果进程已经在运行,则在启动它之前将其终止)

如果我不运行GetProcessByName,我可以毫无问题地启动进程。我还可以启动和终止进程,而不会受到windows的影响

我甚至尝试过在删除程序后通过调用程序中的批处理文件来启动OEM软件来启动该程序,但这是一样的

我启动了一个新项目,以确保其他东西不会发生,上面有三个按钮:

1) 运行GetProcessByName


2) 直接启动OEM软件


3) 通过批处理文件启动OEM(批处理文件将目录更改为“C:\program files\OEM”,然后运行PROG-XY.exe)


BSOD的以下结果:

  • 运行2,然后运行1
  • 运行2,然后手动打开/关闭OEM软件,然后运行1
  • 运行2,然后运行3
以下情况不会导致BSOD

  • 运行1
  • 运行1,关闭软件,再次运行1
  • 运行1,关闭OEM软件,手动打开和关闭,然后按3
  • 运行1,然后运行3
  • 运行2,重新启动前端软件,单击1
此外,如果我将文件名替换为记事本,一切都会正常运行,因此这与OEM软件有关,但是GetProcessByName会做什么使其发生灾难性故障,我不知道


最后一件事是,如果我在调试模式下连接了visual studio调试器,无论我做什么,我都不会得到蓝屏。

您需要做的第一件事是引起错误检查,允许系统保存内存转储,然后检查MSDN文章中列出的四个参数。一旦我们知道哪一个临界物体正在终止,我们的水晶球将会工作得更好。事实上,我会跟着做。这是一个相当扎实的演练。
process.getprocessesbyname("notepad")
dim ps = new ProcessStartInfo
ps.filename = "C:\program files\OEM\PROG-XY.exe" ' path to the OEM software
ps.WorkingDirectory = "C:\program files\OEM" ' It has to start in the right directory
process.start(ps)
process.start("C:\batchfile.bat")