Как подавить DOS-окно (cmd.exe)

  • Автор темы Автор темы Bronza
  • Дата начала Дата начала

Bronza

Client
Регистрация
22.11.2010
Сообщения
51
Реакции
7
Баллы
8
На шаге "выполнить программу" - запускается .exe-шник с параметрами - вылетает DOS-окно (вроде как cmd.exe, не успеваю посмотреть, т.к. открывается на мгновение)... Пытался запускать этот ехе-шник через bat-файл, прописав в нем и "echo off" и r ехе-шнику дописав ">> anyfile.txt" - окно все равно вылетает...

Вопрос - как подавить всплытие\появление этого DOS-окна? В 10 потоков сами представляете - постоянно вылетают эти окна, фокус Винды переключается на них, ну и работать на компе невозможно соответственно.

Плиз хелпми!! )
 
Есть кто живой и с опытом? ))) Понимаю, НГ на носу... Но работа встала, сижу уже четвертый час, и из шарпа пробовал, ну и BAT-ник перенаправлять пытался - окна так и вылетают... Ну а С# он как бэ не работает, если вот так делаю:

System.Diagnostics.ProcessStartInfo start = new System.Diagnostics.ProcessStartInfo();
start.FileName = @"D:\!!!!Zenno\!!!exiftool\{-Variable.randnamefile-}.bat";
start.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
System.Diagnostics.Process.Start(start );

При этом в С# я совсем не шарю - взял код из соседней ветки... Код этот или не работает, или срабатывает со второго раза - в режиме отладки (в PM) сначала пишет "файл не найден", жму еще раз "Далее" - и он срабатывает, BAt-ник исполняется! Ну а в Зенно, ессно, выдается ошибка, и шаб останавливается... Бррр, голова уже квадратная! ПАМАГИТИииии!!
 
А если в общих чертах... а батник то что делает? может там что нибудь плевое, что проще из зенки сделать чем отдельный батник старотовать?
 
Как-то так:
JavaScript:
Развернуть Свернуть Копировать
System.Diagnostics.ProcessStartInfo p = new System.Diagnostics.ProcessStartInfo();
p.WindowStyle = System.Diagnostics.ProcessWindowStyle.Minimized;
p.FileName = project.Variables["path"].Value;
p.Arguments = project.Variables["param"].Value;
p.UseShellExecute = true;
p.CreateNoWindow = true;
var process = System.Diagnostics.Process.Start(p);
 

Вложения

  • qwe.xmlz
    qwe.xmlz
    10,1 KB · Просмотры: 27
  • Спасибо
Реакции: eagleowl
Не работает... Вот мой код, там мало что поменялось:

System.Diagnostics.ProcessStartInfo p = new System.Diagnostics.ProcessStartInfo();
p.WindowStyle = System.Diagnostics.ProcessWindowStyle.Minimized;
p.FileName = project.Variables["{-Variable.nameofbatfile-}"].Value;
p.Arguments = project.Variables[""].Value;
p.UseShellExecute = true;
p.CreateNoWindow = true;

var process = System.Diagnostics.Process.Start(p);

Ошибка вот:

04:06:26 Компиляция кода Ошибка в действии "CS1009" "Нераспознанная управляющая последовательность". [Строка: 3; Cтолбец: 36]
04:06:26 Компиляция кода Ошибка в действии "CS1009" "Нераспознанная управляющая последовательность". [Строка: 3; Cтолбец: 46]
04:06:26 Компиляция кода Ошибка в действии "CS1009" "Нераспознанная управляющая последовательность". [Строка: 3; Cтолбец: 58]

Переменную "{-Variable.nameofbatfile-}" проверял - там все ок, полный путь до BAT-файла...
Выглядит она вот так: d:\!!!!Zenno\!!!exiftool\83follmf5.bat (т.е. полный путь до папки+имя сгенерированного bat-файла)

Аргументы не передаются BAT-нику, поэтому там где "param" в образце - я сделал строку пустой - все по параметрам внутри уже есть в BAT-нике, его просто запустить надо, без всплытия окна.

Всё, опять тупик у меня ))) Попинайте скрипт еще етот пжл!!!
 
это конечно врядли может являться причиной.. но сдается мне что сочетания типа \! воспринимаются как экранирование...
Если Вам не сложно, попробуйте один батничек положить в другую папочку с нормальным названием... маловероятно, что поможет, но вдруг)))))
 
Не работает... Вот мой код, там мало что поменялось:

System.Diagnostics.ProcessStartInfo p = new System.Diagnostics.ProcessStartInfo();
p.WindowStyle = System.Diagnostics.ProcessWindowStyle.Minimized;
p.FileName = project.Variables["{-Variable.nameofbatfile-}"].Value;
p.Arguments = project.Variables[""].Value;
p.UseShellExecute = true;
p.CreateNoWindow = true;

var process = System.Diagnostics.Process.Start(p);

Ошибка вот:

04:06:26 Компиляция кода Ошибка в действии "CS1009" "Нераспознанная управляющая последовательность". [Строка: 3; Cтолбец: 36]
04:06:26 Компиляция кода Ошибка в действии "CS1009" "Нераспознанная управляющая последовательность". [Строка: 3; Cтолбец: 46]
04:06:26 Компиляция кода Ошибка в действии "CS1009" "Нераспознанная управляющая последовательность". [Строка: 3; Cтолбец: 58]

Переменную "{-Variable.nameofbatfile-}" проверял - там все ок, полный путь до BAT-файла...
Выглядит она вот так: d:\!!!!Zenno\!!!exiftool\83follmf5.bat (т.е. полный путь до папки+имя сгенерированного bat-файла)

Аргументы не передаются BAT-нику, поэтому там где "param" в образце - я сделал строку пустой - все по параметрам внутри уже есть в BAT-нике, его просто запустить надо, без всплытия окна.

Всё, опять тупик у меня ))) Попинайте скрипт еще етот пжл!!!

1. Вот так, если параметров нет то их не надо передавать
2. Указывается ТОЛЬКО имя переменной, а не макрос.
3. Если вы хотите вписать путь полностью, вместо имени переменной d:\!!!!Zenno\!!!exiftool\83follmf5.batто писать надо вот так d:\\!!!!Zenno\\!!!exiftool\\83follmf5.bat

System.Diagnostics.ProcessStartInfo p = new System.Diagnostics.ProcessStartInfo();
p.WindowStyle = System.Diagnostics.ProcessWindowStyle.Minimized;
p.FileName = project.Variables["nameofbatfile"].Value;
p.UseShellExecute = true;
p.CreateNoWindow = true;

var process = System.Diagnostics.Process.Start(p);

я же приложил пример, вам нужно в нем было казать только значение переменной path, а переменную парам оставить пустой ((
 
  • Спасибо
Реакции: defcon и alekwuy
Запускать консольный exe можно также?
 
  • Спасибо
Реакции: LightWood
да, без разницы какой exe.
 
Работает, спасибо!
 
Реально пиздато.
Получилось запустить ярлик.
Спасибо большое
 

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)