使用System.Diagnostics.Process.Start运行程序会导致应用程序错误
在我的PC上打开DWG文件:
"C:\Program Files\AutoCAD LT 2007\acadlt.exe" "%1"
如果我从命令行运行它:
"C:\Program Files\AutoCAD LT 2007\acadlt.exe" "C:\Some Path\Test.dwg"
AutoCAD Lite打开DWG文件。
类似地,如果我打开命令提示符并使用参数运行相同的exe,它可以正常工作。
但是,如果我使用
var proc = new System.Diagnostics.Process(); var info = new System.Diagnostics.ProcessStartInfo();
然后
info.FileName = "C:\Some Path\Test.dwg"; proc.StartInfo = info; proc.Start();
要么
info.FileName = "C:\Program Files\AutoCAD LT 2007\acadlt.exe"; info.Arguments= "C:\Some Path\Test.dwg" proc.StartInfo = info; proc.Start();
要么
info.FileName = "cmd.exe"; info.Arguments= "C:\Program Files\AutoCAD LT 2007\acadlt.exe" "C:\Some Path\Test.dwg" proc.StartInfo = info; proc.Start();
我收到以下错误:
acadlt.exe – 应用程序错误
“0x01317c8c”处的指令引用“0x01317c8c”处的存储器。 内存无法“读取”。
单击OK以终止程序单击CANCEL以调试程序
确定取消
顺便提一下,如果我使用调试器逐步执行代码,代码就可以了。
有谁知道如何使用Process.Start打开这个DWG?
确保指定了正确的工作文件夹:
info.WorkingDirectory = "same path as current directory in cmd.exe";
从命令行启动和以这种方式使用ProcessStartInfo
之间的一个区别是后者使用shell执行 。 我不认为它可能导致这个问题,但可能会导致问题。 尝试添加以下内容,看看它是否解决了问题。
info.UseShellExecute = false;
事实certificate,它是Xenocode Postbuild导致应用程序错误。 如果我在普通的.NET exe上运行相同的代码(没有混淆),它可以正常工作。 我已经提到了Xenocode的解决方案。