我有一个用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相同的方法,哪个有效?
答案 0 :(得分:1)
这是一个黑暗中的镜头,但是必须尝试将UseShellExecute
更改为假?
答案 1 :(得分:0)
我解决了这个问题。迈克尔在program.exe中发现崩溃的建议让我看看IDE中针对program.exe的输出,我发现错误也在那里发生,它只是没有崩溃。
原来我有几个 malloc 变量我忘了免费。修复了修复错误和C#应用程序崩溃的问题。