none
如何让程序在后台运行而不显示界面 RRS feed

  • 问题

  • 我使用Process运行一个外部的程序,并且不想让那窗口显示出来。我试了以下方法 CreateNoWindow:无效 ProcessWindowStyle.Hidden:效果是我想要的,但结果不是我想要的 请问还有什么方法吗?
    2011年4月21日 12:26

答案

  • 可以使用后台线程:

       Thread t = new Thread(BackgroundTask);
       t.IsBackground = true;
       t.Start();
    

    将Process运行相应程序的代码放入BackgroundTask方法体中:
       static void BackgroundTask(object state)
       {
            Process myProcess = new Process();
            myProcess.StartInfo.UseShellExecute = false; // 之後再設定 UseShellExecute = false
            myProcess.StartInfo.FileName = "D:\\run.bat";
            myProcess.Start();
       }
    

     


    Leo Liu [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.


    2011年4月26日 6:11
    版主
  • 等 Process 起来后,访问 procss.MainWindowHandle 属性,然后利用 ShowWindow(process.MainWindowHandle, SW_HIDE) 把窗体隐藏起来。如果这一套还不管用,那么只能说明您那个外部程序出来的窗体并不是主窗体。可能是由另外一个 UI 线程创建出来的。
    Mark Zhou
    2011年4月26日 17:13

全部回复

  • 你好

    或者你可以嘗試以下的方法

     

    Process myProcess = new Process();

                myProcess.StartInfo.CreateNoWindow = true; //要先 設定CreateNoWindow = true;

                myProcess.StartInfo.UseShellExecute = false; // 之後再設定 UseShellExecute = false;

                // You can start any process, HelloWorld is a do-nothing example.

                myProcess.StartInfo.FileName = "D:\\run.bat";

                myProcess.Start();

     

     

     

    Please correct me if my concept is wrong

     


    Chi
    2011年4月21日 12:36
    版主
  • 你好

    或者你可以嘗試以下的方法

     

    Process myProcess = new Process();

                myProcess.StartInfo.CreateNoWindow = true; //要先 設定CreateNoWindow = true;

                myProcess.StartInfo.UseShellExecute = false; // 之後再設定 UseShellExecute = false;

                // You can start any process, HelloWorld is a do-nothing example.

                myProcess.StartInfo.FileName = "D:\\run.bat";

                myProcess.Start();

     

     

     

    Please correct me if my concept is wrong

     


    Chi
    这个早就试过了,窗口还是会出现
    2011年4月22日 1:11
  • 可以使用后台线程:

       Thread t = new Thread(BackgroundTask);
       t.IsBackground = true;
       t.Start();
    

    将Process运行相应程序的代码放入BackgroundTask方法体中:
       static void BackgroundTask(object state)
       {
            Process myProcess = new Process();
            myProcess.StartInfo.UseShellExecute = false; // 之後再設定 UseShellExecute = false
            myProcess.StartInfo.FileName = "D:\\run.bat";
            myProcess.Start();
       }
    

     


    Leo Liu [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.


    2011年4月26日 6:11
    版主
  • 等 Process 起来后,访问 procss.MainWindowHandle 属性,然后利用 ShowWindow(process.MainWindowHandle, SW_HIDE) 把窗体隐藏起来。如果这一套还不管用,那么只能说明您那个外部程序出来的窗体并不是主窗体。可能是由另外一个 UI 线程创建出来的。
    Mark Zhou
    2011年4月26日 17:13
  • 可否让程序运行而不在任务管理器显示呢,请高人解答
    2011年4月27日 4:28