[Mono-bugs] [Bug 76403][Wis] Changed - When starting another Console App, a new "console" isn't open but rather the outputs get mixed

bugzilla-daemon at bugzilla.ximian.com bugzilla-daemon at bugzilla.ximian.com
Tue Oct 11 10:54:41 EDT 2005


Please do not reply to this email- if you want to comment on the bug, go to the
URL shown below and enter your comments there.

Changed by kornelpal at hotmail.com.

http://bugzilla.ximian.com/show_bug.cgi?id=76403

--- shadow/76403	2005-10-11 10:16:41.000000000 -0400
+++ shadow/76403.tmp.26309	2005-10-11 10:54:40.000000000 -0400
@@ -21,6 +21,53 @@
 making it all very confusing. On Windows the MS.NET code opens up a whole
 new DOS window while mono on Windows and Linux just mixes both consoles.
 
 ------- Additional Comments From vargaz at gmail.com  2005-10-11 10:16 -------
 What should the mono behaviour be in this case ?
 
+
+------- Additional Comments From kornelpal at hotmail.com  2005-10-11 10:54 -------
+Some tests:
+ProcessStartInfo psi;
+
+Console.WriteLine("This is .NET app (1)");
+Process.Start("cmd.exe");
+psi = new ProcessStartInfo("cmd.exe");
+Process.Start(psi);
+psi = new ProcessStartInfo("cmd.exe");
+psi.UseShellExecute = false;
+Process.Start(psi).WaitForExit();
+Console.WriteLine("This is .NET app (2)");
+Console.ReadLine();
+
+Note that I used WaitForExit as without WaitForExit console is 
+shared between the managed app and cmd.exe. This is the same on Mono 
+and MS.NET so this is the expected behaviour.
+
+The difference is that when UseShellExecute = true (default) is used 
+a new console window will be created.
+
+The difference is in the implementation of Process.Start in MS.NET 
+and Mono.
+
+MS.NET uses CreateProcess when UseShellExecute = false and 
+ShellExecuteEx when UseShellExecute = true.
+
+ProcessStartInfo properties ErrorDialog, ErrorDialogParentHandle, 
+Verb, Verbs are only used with ShellExecuteEx.
+
+While Mono uses cmd.exe to execute the command this results in a 
+quite different behaviour. I think on Windows Mono should use 
+ShellExecuteEx just like MS.NET.
+
+On Linux using shell executable may be a good solution but I don't 
+know the features of Linux enought to can suggest another solution 
+that is more like to ShellExecuteEx.
+
+ShellExecuteEx executes the associated executable and instructs it 
+to open the file specified int FileName. CreateProcess executes 
+FileName if it were an executable. On Windows this means that it is 
+treated as a .com file if it has no .bat or .cmd extension and has 
+no MZ header. If there is Linux has some functionality that is more 
+like this behavour it should be used instead of executing shell as 
+shell interprets some other things on command line like redirection 
+like | or > that should not be allowed.


More information about the mono-bugs mailing list