只有在C#中使用Process.Start()作为外部程序运行时,C控制台程序才会在退出时出现崩溃(访问冲突)

时间:2018-01-03 14:29:13

标签: c# c dll process access-violation

我有一个用C编写的控制台程序,它使用非托管库(dll)来执行USB设备的操作。它读取并使用传递给main函数的参数。在独立编译和执行时(在命令行中),该程序可以正常运行。

然后我有一个用C#编写的第二个程序,它应该用一些参数调用第一个程序,使用以下代码:

Process runProg = new Process(); 
runProg.StartInfo.FileName = @"C:\Path\to\my\program.exe";
runProg.StartInfo.Arguments = @"hello123 testing123@test.com";
runProg.Start();
runProg.WaitForExit();

它运行第一个执行它应该做的事情的程序(我检查了USB设备做了什么),但是当从程序返回时它崩溃并向我显示"该程序已停止工作"窗口。

调试器说:

"Unhandled exception at 0x77962EE5 (ntdll.dll) in program.exe: 0xC0000005: Access violation reading location 0x6E650254."

从C#程序运行第一个程序而不是导致这个的Windows命令行会有什么不同?我忘记了一部分吗?

还有其他方法可以运行第一个程序吗?也许是一种告诉Windows使用cmd.exe执行第一个程序的方法,而不是尝试现在尝试做的任何导致此崩溃的事情?一种使其在功能上与我手动执行第一个程序exe相同的方法,哪个有效?

2 个答案:

答案 0 :(得分:1)

这是一个黑暗中的镜头,但是必须尝试将UseShellExecute更改为假?

MSDN Process Docs

答案 1 :(得分:0)

我解决了这个问题。迈克尔在program.exe中发现崩溃的建议让我看看IDE中针对program.exe的输出,我发现错误也在那里发生,它只是没有崩溃。

原来我有几个 malloc 变量我忘了免费。修复了修复错误和C#应用程序崩溃的问题。