Есть ли способ запустить процессы в фоновом режиме? - PullRequest
3 голосов
/ 12 июля 2009

Существует ли какая-либо командная строка или метод .NET, который запускает процесс в фоновом режиме, скрывая все окна, которые он пытается открыть?

Уже пробовал:

 var process = new Process()
 {
      StartInfo = new ProcessStartInfo()
      {
          CreateNoWindow = true,
          WindowStyle = ProcessWindowStyle.Hidden,
          FileName = TheRealExecutableFileNameHere
      }
 }
 process.Start();

Пока безуспешно

Ответы [ 14 ]

0 голосов
/ 14 сентября 2016

Ниже код работал для меня: Ранее процесс (блокнот) использовался для прошивки блокнота на экране рабочего стола для печати, но это отвлекало пользователя, поэтому нижеприведенный код скрывает процесс блокнота в фоновом режиме.

                System.Windows.Forms.PrintDialog printDialog = new PrintDialog();
                System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo(Application.StartupPath + "/PrintingDocketFile/PrintCustomerOrder.txt");
                psi.Verb = "PRINT";

                //Process.Start(psi);
                //psi.CreateNoWindow = true;
                psi.UseShellExecute = false;
                //---------------------------------------------------

                psi.CreateNoWindow = false;
                psi.UseShellExecute = true;
                psi.FileName = Application.StartupPath + "/PrintingDocketFile/PrintCustomerOrder.txt";
                psi.WindowStyle = ProcessWindowStyle.Hidden;
                psi.Arguments =  @"%windir%\system32\notepad.exe"; 
                //Process.Start(psi);
                //------------------------------------------------------

                /////////////////////----------------------------------

                printProcess.StartInfo = psi;
                /////psi.CreateNoWindow = true;

                //psi.FileName = "Application.StartupPath" + "/PrintingDocketFile/PrintCustomerOrder.txt";
                //p.StartInfo.FileName = "Notepad.EXE";
                //p.StartInfo.Arguments = "/i /q \"" + installationPackages[i] + "\"";

                printProcess.Start();

                /////////////////////////-------------------------------
                while (!printProcess.HasExited) ;


                if (!printProcess.HasExited)
                {
                    printProcess.Close();
                }
0 голосов
/ 14 июля 2014

Вы можете сделать службу Windows. Любое окно, которое служба пытается открыть, просто выполняется в сеансе 0, что означает, что ни один пользователь не может его увидеть. Это касается всех окон, поэтому, возможно, это не то, что вы ищете.

0 голосов
/ 25 июля 2009

Я думаю, вам стоит попробовать создать новую Windows Station. Проверьте эту статью, которая объясняет немного о них на MSDN.

http://msdn.microsoft.com/en-us/library/ms681928(VS.85).aspx

0 голосов
/ 12 июля 2009

Я предполагаю, что вам нужен процесс, который не будет виден пользователям во время работы.

Вы можете попробовать следующее, чтобы понять, хотите ли вы этого.

  1. Создайте простое консольное приложение, которое продолжает работать (и запустите его для тестирования).
  2. Щелкните правой кнопкой мыши Проект -> Свойства -> вкладка Приложения -> Тип вывода -> Измените его с «Консольное приложение» на Приложение Windows.
  3. Запустите то же самое приложение еще раз (чтобы узнать, хотите ли вы этого).
  4. Закройте приложение через диспетчер задач Windows:)

Кажется, что процесс появляется в диспетчере задач, но не отображается на панели задач. Alt + TAB не может запустить этот процесс.

Я просто надеюсь, что вы не создаете вредоносное приложение, хотя:)

...