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

C# 使用System.Diagnostics.Process.Start运行程序会导致应用程序错误,c#,system.diagnostics,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.Diagnosti

在我的电脑上打开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();

我得到以下错误:


acadlt.exe-应用程序错误 “0x01317c8c”处的指令引用了“0x01317c8c”处的内存。无法“读取”内存

单击“确定”终止程序 单击“取消”调试程序

好的,取消
顺便说一句,如果我使用调试器单步执行代码,代码工作正常


有人知道我如何使用Process。开始打开此DWG吗?

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

info.UseShellExecute = false;

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

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

原来是Xenocode后期生成导致了应用程序错误。如果我在一个普通的.NET exe上运行相同的代码(没有模糊处理),它就可以正常工作。我已经参考了Xenocode的解决方案

命令行/shell本身是否使用了
ShellExecute
/
ShellExecuteEx
,这与调用
进程相同?@0xA3如果它是从cmd.exe启动的,我相信它不会使用shell执行。第一个示例有一个参数
%1
,它表示排序和cmd的批处理文件。“%1”只是Windows资源管理器在以注册文件类型显示设置时使用的语法,剩下的东西不多了。我一直讨厌acad。这似乎很难从代码中得到?如果我设置info.FileName=Environment.SystemDirectory+@“\cmd.exe”;info.Arguments=“echo%CD%”info.RedirectStandardOutput=true;当前目录(CD)与Environment.CurrentDirectory相同。但是,如果我从命令提示符下运行cmd.exe,CD完全是一种功能different@Andrew罗伯茨:对不起,我想你误解了我的样品。您应该使用与从控制台窗口以交互方式启动进程时相同的目录。
info.UseShellExecute = false;
info.WorkingDirectory = "same path as current directory in cmd.exe";