在process.start上使用process.getprocesses预先BSOD

时间:2013-08-28 22:26:50

标签: .net vb.net

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

我遇到的问题是,如果我尝试使用process.start(“PROG-XY.exe”)从我的程序中启动OEM软件,我会得到一个BSOD(错误检查0xF4:CRITICAL_OBJECT_TERMINATION {{3} })。

如果我事先运行Process.GetProcessesByName(“这个字符串是什么并不重要”),那么只有BSOD才会发生。 (它将用于查找进程并在启动它之前将其杀死)

如果我没有运行getprocessesbyname,我可以毫无问题地启动该过程。我也可以启动并杀死进程而不会对Windows产生影响。

我甚至尝试通过从我的程序中调用批处理文件来启动程序,以启动OEM软件,但这是同样的事情。

我开始了一个新项目,以确保其他screwey没有上面有三个按钮:

1)运行getprocessesbyname


process.getprocessesbyname("notepad")

2)直接启动OEM软件


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)

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


process.start("C:\batchfile.bat")

BSOD中的以下结果:

  • 运行2,然后运行1
  • 运行2,然后手动打开/关闭OEM软件,然后1
  • 运行2,然后运行3

以下内容不会导致BSOD

  • 运行1
  • 运行1,关闭软件,再次运行1
  • 运行1,关闭OEM软件,手动打开和关闭它,然后按3
  • 运行1,然后运行3
  • 运行2,重启前端软件,单击1

此外,如果我将文件名替换为以记事本开头,那么所有内容都运行良好且花花公子,因此它与OEM软件有关,但是如果getprocessesbyname做了什么会让它发生灾难性的失败,我不知道。

最后一点是,如果我处于调试模式并附带了Visual Studio调试器,无论我做什么,我都不会得到蓝屏。

0 个答案:

没有答案
相关问题