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

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

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

Аватара для CyberMuesli

Старожил


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

Профиль | Отправить 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

 

Ветеран


Contributor


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

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


Risovod, как же «в другом», когда у Вас проблемы именно со startmin.exe?!

Отправлено: 19:57, 03-04-2019 | #41



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

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


Новый участник


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

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


Iska, Вы знаете ответ на мой вопрос или просто набираете количество сообщений?

Отправлено: 12:54, 04-04-2019 | #42


Ветеран


Contributor


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

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


Risovod, дабы у Вас больше не возникало претензий подобного рода — дальше без меня.
Это сообщение посчитали полезным следующие участники:

Отправлено: 00:40, 05-04-2019 | #43


Ветеран


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

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



Цитата Risovod:
startmin.exe располагал рядом с Bat »
а вот это как раз и не имеет значения при таком запуске
Цитата Risovod:
startmin "C:\Users\111\Автозапуск виртуальной ОС.bat" »
это ведь из командной строки запускаете? Оттуда где нет startmin.exe, конечно или из другого bat, НЕ рядом с которым лежит утилита,
потому как все работает как должно:
до запуска
1.jpg
после запуска
2.jpg
Это сообщение посчитали полезным следующие участники:

Отправлено: 02:43, 05-04-2019 | #44


Новый участник


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

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


Цитата alpap:
это ведь из командной строки запускаете? »
Нет.
Цитата Risovod:
ошибка при запуске bat-файла через AnVir Task Manager (запустить сейчас) после добавления его в автозагрузку »
делаю запись в bat-файле и потом запускаю. При этом startmin.exe и bat-файл находятся рядом.
Пробовал так как указано в шапке темы:
Код: Выделить весь код
startmin cmd /c dir c:\*.*
startmin "C:\Users\111\Автозапуск виртуальной ОС.bat"
прописывал это в bat-файле и потом запускал через AnVir Task Manager, но всё равно окно консоли не скрывается.
Если правильно Вас понял, то при запуске из командной строки мне нужно было прописать:
Код: Выделить весь код
С:\>startmin.exe "C:\Users\111\Автозапуск виртуальной ОС.bat"
, а как правильно это прописать в автозагрузку?

Для временного выхода создал скрипт AHK, который сворачивает окно консоли и следом запускающейся виртуальной ОС (VirtualBoxVM.exe), но это всё равно не выход, так как окна всё равно мелькают на экране и всё равно не скрываются в трее.

P.S. Iska, не хотел Вас обидеть, но Вы сами понимаете, что это вышло исходя из Вашего желания заняться неким "поучением" без каких либо предложений в решении поставленной просьбы. Да, видя Ваш статус и количество благодарностей, Вы многим помогли, но в данном случае все сообщения были направлены на просто поговорить с желанием указать на какие-то недостатки.
Вы же могли уже в первом сообщении написать что-то вроде:
Я не использую startmin.exe
Цитата Iska:
...* лично я всегда использую «exit /b»...»
поэтому для данной задачи советую использовать bat-файл с такой-то записью...; или с такой-то записью в автозапуске; или, если даже не используете startmin.exe, но знаете как правильно его использовать для данной задачи, то подробно описать способ.
Поэтому, всё же предлагаю, если есть желание и возможность, помочь в решении поставленной задачи.

P.P.S. Понимаю, что описываемые в данной теме способы направлены только на отображение окна консоли, тем не менее и на этом этапе пока не добился успеха. Хотя перепробовал, на сколько правильно я их понял, много способов из интернета (путем прописывания команд в самом bat-файле и его ярлыке), но достичь поставленной задачи не получилось, а именно конечный итог должен быть:
Сделать автозапуск виртуальной ОС (это решается bat-файлом с записью "C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" startvm "Win XP") без появления окон консоли и запускаемого приложения. Кроме того, значок приложения должен сразу прятаться в трей, а не отображаться на панели задач.

Отправлено: 17:27, 05-04-2019 | #45


Ветеран


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

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


Risovod, так вам нужен скрытный запуск окна - это другая тема и разбиралось много раз, например здесь
вот моя утилита, bat для скрытия подавать параметром:
Код: Выделить весь код
hide_cmd.exe name.bat
hide_cmd.exe
Это сообщение посчитали полезным следующие участники:

Отправлено: 23:00, 05-04-2019 | #46


Новый участник


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

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


alpap, спасибо. В понедельник попробую.
P.S. в пятницу еще смог запустить bat в скрытом виде с помощью vbs
Код: Выделить весь код
Set WshShell = CreateObject("WScript.Shell")
WshShell.Run chr(34) & "C:\Автозапуск виртуальной ОС.bat" & Chr(34), 0
Set WshShell = Nothing

Отправлено: 09:50, 06-04-2019 | #47



Компьютерный форум 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




 
Переход