запуск в свернутом виде (start /min, cmd /K, exit)
В Win9x команда start была отдельным исполняемым модулем start.exe
В WinXP/server START стала командой CMD.EXE со следующими нюансами:
Если ваши сценарии простые, проблема покажется несущественной и надуманной. В таком случае пост не для вас. Почувствовать проблему можно только, если ваши сценарии достаточно сложны и взаимосвязаны, могут запускаться непосредственно, из других сценариев, а также могут запускаться из планировщика (также непосредственно или косвенно). Допустим, есть 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; |
выложите скомпилированную программу, а то скачивать delphi ради одной программы не хочется
|
Вложений: 1
Цитата:
|
Моё мнение таково:
* лично я всегда использую «exit /b», а не «goto :eof», так что, «придётся менять» — мимо; * не вижу никакого смысла в сворачивании окон консоли командного процессора, ни из планировщика, ни интерактивно. |
Цитата:
Цитата:
|
Надуманная проблема, имхо. Что легче использовать сторонний бинарник или прописать exit в батнике?
|
Цитата:
|
Цитата:
Цитата:
|
Цитата:
|
Цитата:
|
Цитата:
результатом может быть наличие-отсутствие файлов-семафоров, доступность ресурсов, состояние аппаратуры - что угодно |
То бишь, чтобы организовать связь, дочерний пакетный файл всё одно придётся править.
|
Цитата:
Связь может быть организована в обратном направлении: родительский скрипт может проверить результаты работы параллельных дочерних скриптов, которые не надо ни коим образом подправлять. Так или иначе любые действия приходится программировать. Мне кажется, Вы не уловили основную мысль: речь не о том, что startmin волшебным образом позволяет ничего не делать, а о том, что дочерний скрипт можно писать, не думая о том, каким способом он вызван и как обеспечить закрытие окна CMD. |
Цитата:
Цитата:
|
Цитата:
Мнение немного поверхностное, я написал в чем трудности с EXIT. start /b забавный ключ, но не запускает программу в свернутом виде, а так же не избавляет от необходимости предпринимать специальные меры для закрытия окна CMD после завершения скрипта. Все это следствие того, что проблема кажется Вам надуманной и Вы не хотите в нее вникнуть. |
Цитата:
Код:
:: main.cmd Код:
:: 2.cmd и 3.cmd |
Цитата:
Кроме того, ключ /B приводит к полному хаосу в стандартном вводе и выводе, потому что окно одно на всех. Кроме того, вы не видите, что main.cmd заканчивает свою работу РАНЬШЕ 2.cmd и 3.cmd, а не наоборот, как вы утверждаете. Кроме того, вы не поняли, что моя цель - вовсе не закончить 2 и 3 раньше, чем main. Итого, вы уводите беседу очень далеко и совсем в другую сторону. |
Цитата:
Цитата:
Цитата:
Цитата:
Код:
start /b cmd /c "1>nul 2.cmd" Цитата:
|
Цитата:
Не запускает параллельно в свернутом окне. Цитата:
Вы не уловили основную мысль: цель - чтобы дочерний скрипт можно писать, не думая о том, каким способом он вызван и как обеспечить закрытие окна CMD. Ваш способ start /b имеет дополнительные недостатки с выводом + не обеспечит закрытие окна в случае запуска из планировщика задач через start /b или start /min. Если же Вы замените exit /b на exit в main.cmd, вы сделаете этот скрипт непригодным для вызова в качестве дочернего из другого родительского скрипта. |
Цитата:
Цитата:
Цитата:
Код:
schtasks /create /sc once /tn test /tr "cmd /c start /min c:\path\to\1.cmd" /st 19:29 |
Цитата:
Я в тайне надеялся, что найдется кто-то, кто скажет: вот программа/скрипт лучше, она делает то же самое, только умеет устанавливать заголовок окна, рабочую папку и анализировать код возврата. |
Цитата:
|
Цитата:
|
Спасибо за программу! То что нужно!
Сначала попробовал NirCmd от NirSoft с параметрами min и hide (запускал NumLock Calculator через плановщик), так во-первых окошко программы всегда появлялось (не сворачивалось), во-вторых мигало черное окно. А Startmin сделал именно то что требовалось - запустить в свернутом виде. Нужно сделать эту утилиту достоянием масс ) Особенно актуально это становится в Windows 8, где UAC при ползунке вниз полностью не отключается, и некоторые программы приходится запускать от имени администратора через плановщик (например, чтоб тот же NumLock Calculator вызывался из программ запущенных от имени администратора, иначе винда не дает к нему доступа). |
Цитата:
ps. Воспользуйтесь кнопкой "полезное сообщение" |
т.к всё вышеперечисленное не сработало
запустил прогу как сервис с помощью anyserv http://forum.oszone.net/thread-68513.html |
ОГРОМНОЕ СПАСИБО!!!
Пишу WSH скрипт для регулярного автообновления базы данных. Промудохался вчера пол дня с мигающими CMD окнами... Думал так и не нарою решения, а тут Ваш пост. Зарегистрировался только ради того, чтобы поблагодарить :) Простая прога, но очень полезная... |
Цитата:
|
Спасибо автору темы за программу.
Преведенное в ней решение позволило избавиться от мигающих черных окошек при запуске планировщиком программ со свернутым окном. Так как не "пользую" Дельфи, предлагаю аналогичную программу на VC++. Код:
#include "stdafx.h" |
Цитата:
|
Вложений: 1
Цитата:
|
Спасибо за софтинку.
Забрал сишную версию. Она мне ближе по духу ) |
спасибо. поскольку дельфи не выключается сразу и попробовал.
в ответ дарю winmin.exe [имя_окна] если запустить без параметров, значит минимизирует сам себя) |
Вложений: 1
сорри, забыл прикрепить)
|
Цитата:
|
Alexander S, Спасибо! Помогло!)
|
Вложений: 2
еще можно попробовать
SetConsole.exe /minimize или /hide |
Подскажите Путь, куда нужно расположить startmin.exe и как правильно сделать запись в автозапуске, чтобы работала программа (запуск BAT в свернутом виде)?
P.S. Запись: startmin "C:\Users\111\Автозапуск виртуальной ОС.bat" выдает ошибку - не удаётся найти startmin.exe (startmin.exe располагал рядом с Bat и в автозагрузку) |
Цитата:
|
Iska, ошибки при запуске bat-файла через AnVir Task Manager (запустить сейчас) после добавления его в автозагрузку.
Скрытый текст
Вопрос был в другом: как правильно организовать с помощью, обсуждаемого здесь, startmin.exe запуск bat-файла (запуск виртуальной ОС через VirtualBox) в свернутом виде. |
Risovod, как же «в другом», когда у Вас проблемы именно со startmin.exe?!
|
Iska, Вы знаете ответ на мой вопрос или просто набираете количество сообщений?
|
Risovod, дабы у Вас больше не возникало претензий подобного рода — дальше без меня.
|
Цитата:
Цитата:
потому как все работает как должно: до запуска Файл 157104 после запуска Файл 157105 |
Цитата:
Цитата:
Пробовал так как указано в шапке темы: Код:
startmin cmd /c dir c:\*.* Если правильно Вас понял, то при запуске из командной строки мне нужно было прописать: Код:
С:\>startmin.exe "C:\Users\111\Автозапуск виртуальной ОС.bat" Для временного выхода создал скрипт AHK, который сворачивает окно консоли и следом запускающейся виртуальной ОС (VirtualBoxVM.exe), но это всё равно не выход, так как окна всё равно мелькают на экране и всё равно не скрываются в трее. P.S. Iska, не хотел Вас обидеть, но Вы сами понимаете, что это вышло исходя из Вашего желания заняться неким "поучением" без каких либо предложений в решении поставленной просьбы. Да, видя Ваш статус и количество благодарностей, Вы многим помогли, но в данном случае все сообщения были направлены на просто поговорить с желанием указать на какие-то недостатки. Вы же могли уже в первом сообщении написать что-то вроде: Я не использую startmin.exe Цитата:
Поэтому, всё же предлагаю, если есть желание и возможность, помочь в решении поставленной задачи. P.P.S. Понимаю, что описываемые в данной теме способы направлены только на отображение окна консоли, тем не менее и на этом этапе пока не добился успеха. Хотя перепробовал, на сколько правильно я их понял, много способов из интернета (путем прописывания команд в самом bat-файле и его ярлыке), но достичь поставленной задачи не получилось, а именно конечный итог должен быть: Сделать автозапуск виртуальной ОС (это решается bat-файлом с записью "C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" startvm "Win XP") без появления окон консоли и запускаемого приложения. Кроме того, значок приложения должен сразу прятаться в трей, а не отображаться на панели задач. |
Risovod, так вам нужен скрытный запуск окна - это другая тема и разбиралось много раз, например здесь
вот моя утилита, bat для скрытия подавать параметром: Код:
hide_cmd.exe name.bat |
alpap, спасибо. В понедельник попробую.
P.S. в пятницу еще смог запустить bat в скрытом виде с помощью vbs Код:
Set WshShell = CreateObject("WScript.Shell") |
Время: 23:56. |
Время: 23:56.
© OSzone.net 2001-