使用System.Diagnostics.Process.Start运行程序会导致应用程序错误

时间:2010-10-19 21:31:18

标签: c# system.diagnostics

在我的电脑上打开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”处的存储器。内存无法“读取”。

单击“确定”终止程序 单击CANCEL以调试程序

确定取消


顺便提一下,如果我使用调试器逐步执行代码,代码就可以正常工作。

任何人都知道我如何使用Process.Start打开这个DWG?

3 个答案:

答案 0 :(得分:5)

确保指定了正确的工作文件夹:

info.WorkingDirectory = "same path as current directory in cmd.exe";

答案 1 :(得分:2)

从命令行启动和以这种方式使用ProcessStartInfo之间的一个区别是后者uses shell execution。我不认为它可能导致这个问题,但可能会导致问题。尝试添加以下内容,看看它是否解决了问题。

info.UseShellExecute = false;

答案 2 :(得分:0)

事实证明,它是Xenocode Postbuild导致应用程序错误。如果我在普通的.NET exe上运行相同的代码(没有混淆),它可以正常工作。我已经提到了Xenocode的解决方案。