Как скрыть окно cmd во время запуска пакетного файла?
Как скрыть окно cmd во время запуска пакетного файла?
Я использую следующий код для запуска командного файла
process = new Process(); process.StartInfo.FileName = batchFilePath; process.Start();
- Система и прерывания, вызывающие высокий CPU
- Как получить PID процесса, который я только начал в java-программе?
- Перенаправление с помощью Runtime.getRuntime (). Exec () не работает
- Система (ACPI.sys) всегда использует около 15-20% моего процессора
- Открыть файл с соответствующим приложением
- Инструмент / метод Java для принудительного уничтожения дочернего процесса
- Любой способ завершить все процессы на определенном диске?
- Как определить завершенный процесс Windows, если у меня все еще есть его PID?
- .NET - WindowStyle = hidden vs. CreateNoWindow = true?
- Почему этот процесс рушится, как только он запускается?
- Как я могу узнать абсолютный путь запущенного процесса?
- Процесс Zombie с использованием 100% CPU
- Как определить, что начинается с процесса?
Если proc.StartInfo.UseShellExecute является ложным , то вы запускаете этот процесс и можете использовать:
proc.StartInfo.CreateNoWindow = true;
Если proc.StartInfo.UseShellExecute истинно , то ОС запускает процесс, и вы должны предоставить «подсказку» для процесса через:
proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
Однако вызываемое приложение может игнорировать этот последний запрос.
Если вы используете UseShellExecute = false , вам может потребоваться перенаправить стандартный вывод / ошибку, чтобы зафиксировать произведенные записи:
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; }
В блоге MSDN есть хорошая страница, CreateNoWindow
.
В Windows также есть ошибка, которая может вызвать диалог и CreateNoWindow
если вы передаете имя пользователя / пароль. Для получения дополнительной информации
http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=98476 http://support.microsoft.com/?kbid=818858
В соответствии с свойствами процесса у вас есть:
Свойство:
CreateNoWindow
Примечания. Позволяет запускать программу командной строки молча. Он не мигает консольным окном.
а также:
Недвижимость:
WindowStyle
Примечания. Используйте это, чтобы установить windows как скрытые. Автор часто использовал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 = "-fj -o \"" + ex1 + "\" -z 1.0 -sy " + 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. } }
Использовать: process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
Это то, что сработало для меня. Когда вы перенаправляете все входные и выходные данные и устанавливаете скрытое окно, оно должно работать
Process p = new Process(); p.StartInfo.RedirectStandardError = true; p.StartInfo.RedirectStandardInput = true; p.StartInfo.RedirectStandardOutput = true; p.StartInfo.UseShellExecute = false; p.StartInfo.CreateNoWindow = true;