Beispiel #1
0
        private static int Main(string[] args)
        {
            // from http://blogs.msdn.com/b/microsoft_press/archive/2010/02/03/jeffrey-richter-excerpt-2-from-clr-via-c-third-edition.aspx
            AppDomain.CurrentDomain.AssemblyResolve += ResolveEventHandler;

            if (args.Length != 0 && args.Contains("--cl"))
            {
                Process process = null;

                if (args.Contains("--consoleByProcessId"))
                {
                    //Get a parent procss for see where send the output.
                    process = Process.GetProcessById(Process.GetCurrentProcess().Id).Parent();
                }
                else
                {
                    //Get a pointer to the forground window.  The idea here is that
                    //IF the user is starting our application from an existing console
                    //shell, that shell will be the uppermost window.  We'll get it
                    //and attach to it
                    IntPtr ptr = GetForegroundWindow();

                    int u;

                    GetWindowThreadProcessId(ptr, out u);

                    process = Process.GetProcessById(u);
                }

                if (process.ProcessName == "cmd")                 //Is the uppermost window a cmd process?
                {
                    AttachConsole(process.Id);
                }
                else
                {
                    //no console AND we're in console mode ... create a new console.

                    AllocConsole();
                }

                var clRunner      = new CommandLineRunner();
                int dosErrorLevel = clRunner.Run(args);

                FreeConsole();
                return(dosErrorLevel);
            }
            else
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new MainForm());

                return(0);
            }
        }
        private static int Main(string[] args)
        {
            // from http://blogs.msdn.com/b/microsoft_press/archive/2010/02/03/jeffrey-richter-excerpt-2-from-clr-via-c-third-edition.aspx
            AppDomain.CurrentDomain.AssemblyResolve += ResolveEventHandler;

            if (args.Length != 0 && args.Contains("--cl"))
            {
                //Get a parent procss for see where send the output.
                Process process = Process.GetProcessById(Process.GetCurrentProcess().Id).Parent();

                if (process.ProcessName == "cmd") //Is the uppermost window a cmd process?
                {
                    AttachConsole(process.Id);
                }
                else
                {
                    //no console AND we're in console mode ... create a new console.

                    AllocConsole();
                }

                var clRunner      = new CommandLineRunner();
                int dosErrorLevel = clRunner.Run(args);

                FreeConsole();
                return(dosErrorLevel);
            }
            else
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new MainForm());

                return(0);
            }
        }