首先,一点背景:我有一个程序,它作为一个实验室设备的前端。实验室设备附带的软件具有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中的以下结果:
以下内容不会导致BSOD
此外,如果我将文件名替换为以记事本开头,那么所有内容都运行良好且花花公子,因此它与OEM软件有关,但是如果getprocessesbyname做了什么会让它发生灾难性的失败,我不知道。
最后一点是,如果我处于调试模式并附带了Visual Studio调试器,无论我做什么,我都不会得到蓝屏。