views:

41

answers:

3

On my PC DWG files open with:

"C:\Program Files\AutoCAD LT 2007\acadlt.exe" "%1"

If I run this from the command line:

"C:\Program Files\AutoCAD LT 2007\acadlt.exe" "C:\Some Path\Test.dwg"

AutoCAD Lite open the DWG file.

Similarly if I open a command prompt and run the same exe with argument, it works fine.

However if I use

var proc = new System.Diagnostics.Process();
var info = new System.Diagnostics.ProcessStartInfo();

and then

info.FileName = "C:\Some Path\Test.dwg";
proc.StartInfo = info;
proc.Start();

or

info.FileName = "C:\Program Files\AutoCAD LT 2007\acadlt.exe";
info.Arguments= "C:\Some Path\Test.dwg"
proc.StartInfo = info;
proc.Start();

or

info.FileName = "cmd.exe";
info.Arguments= "C:\Program Files\AutoCAD LT 2007\acadlt.exe" "C:\Some Path\Test.dwg"
proc.StartInfo = info;
proc.Start();

I get the following error:


acadlt.exe - Application Error

The instruction at "0x01317c8c" referenced memory at "0x01317c8c". The memory could not be "read".

Click on OK to terminate the program Click on CANCEL to debug the program

OK Cancel


Incidentally the code works ok if I step through the code with the debugger.

Anyone know how I can use Process.Start to open this DWG?

A: 

One difference between launching from the command line and using ProcessStartInfo in this manner is that the latter uses shell execution. I don't think it's likely to be causing this problem but can cause issues. Try adding the following and seeing if it fixes the problem.

info.UseShellExecute = false;
JaredPar
Isn't the command line/shell per-se using `ShellExecute`/`ShellExecuteEx` which would be identical to calling `Process.Start` with `UseShellExecute = true;`?
0xA3
@0xA3 if it's being launched from cmd.exe I don't *believe* it uses shell execution. The first example has an argument of `%1` which indicates a batch file of sorts and cmd.
JaredPar
The "%1" is just the syntax that Windows Explorer uses when displaying the settings in Registered File Types
Andrew Roberts
+2  A: 

Make sure to have the correct working folder specified:

info.WorkingDirectory = "same path as current directory in cmd.exe";
0xA3
There isn't much of anything left. I always hated acad.
Hans Passant
This seems hard to get from code? http://stackoverflow.com/questions/217951/get-the-current-working-directory-for-cmd-exe
Andrew Roberts
If I set info.FileName = Environment.SystemDirectory + @"\cmd.exe"; info.Arguments= "echo %CD%" info.RedirectStandardOutput = true; the current directory (CD) is the same as Environment.CurrentDirectory. However if I run cmd.exe from the command prompt, CD is something completely different
Andrew Roberts
@Andrew Roberts: Sorry, I think you misunderstood my sample. You should use the same directory as when you start the process interactively from the console window.
0xA3
A: 

It turns out that it was Xenocode Postbuild causing the Application Error. If I run the same code on a normal .NET exe (not obfuscated), it works fine. I have referred to Xenocode for a solution.

Andrew Roberts