Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - запуск в свернутом виде (start /min, cmd /K, exit)

Ответить
Настройки темы
CMD/BAT - запуск в свернутом виде (start /min, cmd /K, exit)

Аватара для CyberMuesli

Старожил


Сообщения: 207
Благодарности: 18

Профиль | Отправить PM | Цитировать


Изменения
Автор: CyberMuesli
Дата: 12-06-2012
В Win9x команда start была отдельным исполняемым модулем start.exe
В WinXP/server START стала командой CMD.EXE со следующими нюансами:
  • даже если указан ключ /MIN все равно кратковременно мигает черное окошко, в котором запускается сам CMD.EXE, выполняющий команду START.
  • если с помощью START запускается BAT-файл, то он запускается с использованием CMD /K, при этом окно CMD после завершения BAT-файла не закрывается
  • последнее обстоятельство приводит к весьма существенным затруднениям.

Если ваши сценарии простые, проблема покажется несущественной и надуманной. В таком случае пост не для вас. Почувствовать проблему можно только, если ваши сценарии достаточно сложны и взаимосвязаны, могут запускаться непосредственно, из других сценариев, а также могут запускаться из планировщика (также непосредственно или косвенно).

Допустим, есть BAT, который прекрасно работает. Мы его решили запускать через start /min из планировщика. Всего-то изменение способа запуска повлечет неприятную необходимость менять код: все goto :eof придется заменить на EXIT + поставить EXIT в конце (иначе окно не закроется и со временем накопится столько незакрытых черных окон, что сервер упадет). При этом BAT станет непригоден для использования, если он вызывается из другого BAT (т.к. завершится весь процесс CMD). Получается, если ставить цель написать сценарий, корректно работающий в различных вариантах запуска, необходимо следовать правилу, согласно которому, каждому сценарию должна в параметрах передаваться информацию о способе его запуска, а этот сценарий, в свою очередь, должен снабжать этой же информацией другие сценарии в цепочке, передавая ее параметрах вызова.

Все это крайне неприятно, если не иметь отдельный исполняемый EXE модуль (как в Win9x), выполняющий запуск процесса/сценария в свернутом виде.

Я решил проблему такой программкой на дельфи. Это снимает все негативные моменты + дает дополнительный бонус в виде отсутствия мелькания черных окон и/или сбивания фокуса при запуске из планировщика. Первый параметр - имя процесса (можно указывать EXE и также непосредственно BAT, без полного пути и расширения), остальные - параметры запускаемого процесса. Например:
startmin cmd /c dir c:\*.*
startmin "c:\Admin scripts\daily backup.bat" "\\server\common files\*.*"

Код: Выделить весь код
program startmin;

uses
  SysUtils, Windows,ShellAPI;
var Param,ProgCmdLine:AnsiString; i:integer;

begin
   ProgCmdLine := '';
   for i:= 2 to ParamCount do begin
       if i >= 3 then
          ProgCmdLine := ProgCmdLine +' ';
       Param := ParamStr(i);
       if Pos(' ',Param) <> 0 then
          Param := '"'+Param+'"';
       ProgCmdLine := ProgCmdLine + Param;
   end;
   ShellExecute(0,nil,PChar(ParamStr(1)),PChar(ProgCmdLine),nil,SW_SHOWMINNOACTIVE);
end.
Было бы интересно послушать мнения по данному вопросу.

-------
Кибер Мюсли

Это сообщение посчитали полезным следующие участники:

Отправлено: 01:43, 12-06-2012

 

Аватара для ferget

Разный


Сообщения: 1294
Благодарности: 359

Профиль | Отправить PM | Цитировать


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

Отправлено: 01:51, 12-06-2012 | #2



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

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для CyberMuesli

Старожил


Сообщения: 207
Благодарности: 18

Профиль | Отправить PM | Цитировать


Вложения
Тип файла: rar startmin.rar
(19.0 Kb, 395 просмотров)

Цитата ferget:
выложите скомпилированную программу, а то скачивать delphi ради одной программы не хочется »

-------
Кибер Мюсли

Это сообщение посчитали полезным следующие участники:

Отправлено: 01:55, 12-06-2012 | #3


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Моё мнение таково:

* лично я всегда использую «exit /b», а не «goto :eof», так что, «придётся менять» — мимо;
* не вижу никакого смысла в сворачивании окон консоли командного процессора, ни из планировщика, ни интерактивно.

Отправлено: 07:48, 12-06-2012 | #4


Аватара для CyberMuesli

Старожил


Сообщения: 207
Благодарности: 18

Профиль | Отправить PM | Цитировать


Цитата Iska:
лично я всегда использую «exit /b», »
exit /b не закроет окно CMD, только exit
Цитата Iska:
не вижу никакого смысла в сворачивании окон консоли командного процессора, ни из планировщика, ни интерактивно. »
Пара примеров.
  1. Вы сидите в редакторе и занимаетесь копипастой. Неожиданно в планировщике срабатывает скрипт, перехватывает фокус ввода (что само по себе неприятно) и натыкается на Ctrl-C, предназначенное редактору (что неприятно вдвойне)
  2. Скрипт вызывает несколько скриптов (например 255), которые могут быть выполнены как последовательно (что долго), так и параллельно и запускаются через start. Чтобы не прерывалось наблюдение за основным скриптом удобно запускать не просто через start, а через start /min
  3. Как ни странно, программы могут вызывать скрипты, при этом такие вызовы могут происходить даже в диалоговом окне. Сбивание фокуса ввода и мелькание окон по ходу расстановки галок весьма неприятная вещь.

-------
Кибер Мюсли

Это сообщение посчитали полезным следующие участники:

Отправлено: 08:18, 12-06-2012 | #5


Ветеран


Сообщения: 1758
Благодарности: 966

Профиль | Цитировать


Надуманная проблема, имхо. Что легче использовать сторонний бинарник или прописать exit в батнике?

Отправлено: 08:30, 12-06-2012 | #6


Аватара для CyberMuesli

Старожил


Сообщения: 207
Благодарности: 18

Профиль | Отправить PM | Цитировать


Цитата Foreigner:
Надуманная проблема, имхо. Что легче использовать сторонний бинарник или прописать exit в батнике? »
Я написал, в чем затруднения с exit. Если проблема кажется надуманной - просто пройдите мимо.

-------
Кибер Мюсли


Отправлено: 08:54, 12-06-2012 | #7


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата CyberMuesli:
и натыкается на Ctrl-C, »
Не-а . Я использую Ctrl-Insert.

Цитата CyberMuesli:
Скрипт вызывает несколько скриптов (например 255), которые могут быть выполнены как последовательно (что долго), так и параллельно и запускаются через start. Чтобы не прерывалось наблюдение за основным скриптом удобно запускать не просто через start, а через start /min »
Логично. Но, простите, что Вы собираетесь наблюдать в основном скрипте, если он при этом теряет всякую связь с дочерними?

Отправлено: 09:10, 12-06-2012 | #8


Аватара для CyberMuesli

Старожил


Сообщения: 207
Благодарности: 18

Профиль | Отправить PM | Цитировать


Цитата Iska:
что Вы собираетесь наблюдать в основном скрипте, если он при этом теряет всякую связь с дочерними? »
почему он теряет связь? он ждет результатов

-------
Кибер Мюсли


Отправлено: 09:14, 12-06-2012 | #9


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата CyberMuesli:
почему он теряет связь? он ждет результатов »
Каким образом? Поясните.

Отправлено: 09:23, 12-06-2012 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - запуск в свернутом виде (start /min, cmd /K, exit)

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
есть ли утилитка для win7, которая автоматич запускает в свернутом виде программы? HarrysFerrarievich Хочу все знать 5 15-12-2011 12:16
fsck died with exit code 4 hnsk Общий по Linux 2 20-09-2010 23:08
[решено] Как после команды Run выполнить Exit Centrinar AutoIt 5 01-02-2010 21:30
kde cannot start :((( DominuS Общий по Linux 7 04-05-2005 07:00
CD Start-It BORIS YK Хочу все знать 3 15-12-2003 00:10




 
Переход