仅当 运行 作为 C# 中的外部程序使用 Process.Start() 时,C 控制台程序才会在退出时崩溃(访问冲突)
C console program crashes on exit (Access Violation) only when run as an external program in C# using Process.Start()
我有一个用 C 语言编写的控制台程序,它使用非托管库 (dll) 对 USB 设备执行操作。它读取并使用传递给主函数的参数。当独立编译和执行时(在命令行中),该程序可以运行并正常退出。
然后我有第二个用 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 设备做了什么),但是当从程序返回时它崩溃并向我显示 "This program has stopped working" window.
调试器说:
"Unhandled exception at 0x77962EE5 (ntdll.dll) in program.exe: 0xC0000005: Access violation reading location 0x6E650254."
从 C# 程序 运行 宁第一个程序与 windows 命令行会导致这种情况有什么不同?我是不是忘记了什么?
还有其他方法可以运行第一个程序吗?也许是告诉 Windows 使用 cmd.exe 执行第一个程序的方法,而不是尝试它现在尝试做的任何导致此崩溃的事情?一种使它在功能上与我手动执行第一个程序 exe 相同的方法,可以正常工作吗?
这有点摸不着头脑,但必须尝试将 UseShellExecute
更改为 false?
我解决了这个问题。迈克尔关于在 program.exe 中查找崩溃的建议让我查看了 IDE 中 program.exe 的输出,我注意到那里也发生了错误,只是没有崩溃。
原来我有几个 malloc 的变量我忘了 free。修复了 C# 应用程序中的错误和崩溃问题。
我有一个用 C 语言编写的控制台程序,它使用非托管库 (dll) 对 USB 设备执行操作。它读取并使用传递给主函数的参数。当独立编译和执行时(在命令行中),该程序可以运行并正常退出。
然后我有第二个用 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 设备做了什么),但是当从程序返回时它崩溃并向我显示 "This program has stopped working" window.
调试器说:
"Unhandled exception at 0x77962EE5 (ntdll.dll) in program.exe: 0xC0000005: Access violation reading location 0x6E650254."
从 C# 程序 运行 宁第一个程序与 windows 命令行会导致这种情况有什么不同?我是不是忘记了什么?
还有其他方法可以运行第一个程序吗?也许是告诉 Windows 使用 cmd.exe 执行第一个程序的方法,而不是尝试它现在尝试做的任何导致此崩溃的事情?一种使它在功能上与我手动执行第一个程序 exe 相同的方法,可以正常工作吗?
这有点摸不着头脑,但必须尝试将 UseShellExecute
更改为 false?
我解决了这个问题。迈克尔关于在 program.exe 中查找崩溃的建议让我查看了 IDE 中 program.exe 的输出,我注意到那里也发生了错误,只是没有崩溃。
原来我有几个 malloc 的变量我忘了 free。修复了 C# 应用程序中的错误和崩溃问题。