2009-07-08 7 views

ответ

39

Если proc.StartInfo.UseShellExecute является ложным, то вы запускаете процесс и может использовать:

proc.StartInfo.CreateNoWindow = true; 

Если proc.StartInfo.UseShellExecute это правда, то ОС запуск этого процесса, и вы должны предоставить «подсказку» для этого процесса:

proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; 

Однако звонок это приложение может игнорировать этот последний запрос.

При использовании UseShellExecute = ложные, вы можете рассмотреть вопрос о перенаправлении стандартного вывода/ошибки, чтобы захватить любое протоколирование произведенное:

proc.StartInfo.UseShellExecute = false; 
proc.StartInfo.RedirectStandardOutput = true; 
proc.OutputDataReceived += new DataReceivedEventHandler(ProcessOutputHandler); 
proc.StartInfo.RedirectStandardError = true; 
proc.ErrorDataReceived += new DataReceivedEventHandler(ProcessOutputHandler); 

И есть функция, как

private void ProcessOutputHandler(object sendingProcess, DataReceivedEventArgs outLine) 
{ 
    if (!String.IsNullOrEmpty(outLine.Data)) // use the output outLine.Data somehow; 
} 

Там в хорошая страница, покрывающая CreateNoWindow это на an MSDN blog.

В Windows есть ошибка, которая может вызвать диалог и поразить CreateNoWindow, если вы пропустите имя пользователя/пароль. Для получения дополнительной информации

http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=98476 http://support.microsoft.com/?kbid=818858

+0

Иногда работает, другие нет. Это зависит от команд bat-файла? – Ahmed

+0

Ахмед, я сделал ответ более всеобъемлющим и два разных варианта, которые вы скрываете за окном. Кроме того, в зависимости от приложения, я думаю, вы все равно можете его разразиться и сделать некоторые окна, несмотря на ваши усилия. –

5

Использование: process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;

+1

Иногда работает, другие Безразлично «т. Это зависит от команд bat-файла? – Ahmed

7

Согласно Process properties, у вас есть:

недвижимости: CreateNoWindow
Примечания: Позволяет запускать программу командной строки молча. Он не мигает консольным окном.

и:

недвижимость: WindowStyle
Примечание: Используется для установки окон, как скрытые. Часто используется ProcessWindowStyle.Hidden.

В качестве примера!

static void LaunchCommandLineApp() 
{ 
    // For the example 
    const string ex1 = "C:\\"; 
    const string ex2 = "C:\\Dir"; 

    // Use ProcessStartInfo class 
    ProcessStartInfo startInfo = new ProcessStartInfo(); 
    startInfo.CreateNoWindow = false; 
    startInfo.UseShellExecute = false; 
    startInfo.FileName = "dcm2jpg.exe"; 
    startInfo.WindowStyle = ProcessWindowStyle.Hidden; 
    startInfo.Arguments = "-f j -o \"" + ex1 + "\" -z 1.0 -s y " + ex2; 

    try 
    { 
     // Start the process with the info we specified. 
     // Call WaitForExit and then the using statement will close. 
     using (Process exeProcess = Process.Start(startInfo)) 
     { 
      exeProcess.WaitForExit(); 
     } 
    } 
    catch 
    { 
     // Log error. 
    } 
} 
+1

Иногда работает, другие нет. Это зависит от команд bat-файла? – Ahmed

0

Это то, что работает для меня, Когда вы поменяете все входа и выхода, и установить окно спрятанный, он должен работать

  Process p = new Process(); 
      p.StartInfo.RedirectStandardError = true; 
      p.StartInfo.RedirectStandardInput = true; 
      p.StartInfo.RedirectStandardOutput = true; 
      p.StartInfo.UseShellExecute = false; 
      p.StartInfo.CreateNoWindow = true; 
Смежные вопросы