Как запустить консольное приложение без окна
В Windows XP можно ли запустить пакетный файл (.bat или .cmd) через ярлык без "черного окна"?
Сохраните следующее как wscript, например, hidecmd.vbs после замены «testing.bat» именем вашего пакетного файла.
Это просто упрощение ответа Шаджи. Вы можете запустить свой пакетный скрипт через скрипт VBScript (.vbs) следующим образом:
Это выполнит ваш командный файл без показанного командного окна.
Просто чтобы расширить ответы "Использовать сценарии Windows" (что я считаю лучшим, потому что он уже встроен), вот как это сделать, используя один скрипт-обертку и передавая имя "реального" пакетного файла в качестве параметра. Дополнительные параметры будут переданы в командный файл.
Так, например, сохраните указанный выше файл как NoShell.vbs где-нибудь, затем вызовите:
Наконец, если вы хотите запустить это откуда-то, которое не понимает файл .vbs (например, "Внешние инструменты" в Visual Studio), вам нужно вызвать C:\Windows\System32\wscript.exe с файлом VBS в качестве первого параметра и с командным файлом в качестве второго.
Вы можете изменить свойства ярлыка, чтобы запуск был свернут.
Чтобы запустить его полностью незаметно, вам понадобится что-то еще, например Windows Scripting.
Используйте начало с опции '/B'. Например:
Бесплатный GPL с открытым исходным кодом "Создать скрытый процесс"
Microsoft Security Essentials и, возможно, большинство других сканеров вирусов и вредоносных программ будут относиться к исполняемому файлу chp.exe как к вирусу, поскольку он скрывает любую указанную вами программу от отображения окна или кнопки панели задач, как это делают вирусы.
Это не вирус. Например, не скрывает целевой процесс от появления в диспетчере задач. И, конечно, исходный код включен, так что вы можете видеть, что он очень маленький и ничего не делает, кроме запуска любой программы, которую вы ему даете.
Вы даже не должны верить, что включенный chp.exe действительно был собран из этого источника. Вы можете отказаться от прилагаемого chp.exe и скомпилировать свой собственный из исходного кода, и все необходимые инструменты для этого даже бесплатны и загружаемы.
Вы также можете просто создать ярлык для файла .bat или .cmd, затем щелкнуть правой кнопкой мыши ярлык, Свойства, вкладку Ярлык, Выполнить: свернуто. Затем в запланированных задачах используйте ярлык вместо файла .bat/.cmd напрямую. Это предотвратит появление окна, но кнопка панели задач все равно появится.
Просто фоновый режим (без окна), но без перенаправления в файл работает так.
start /b myprog.exe
Просто перенаправление вывода в файл, но без закрытия окна работает так.
cmd /c "myprog.exe > myfile.txt"
или
myprog.exe > myfile.txt
В любом из этих случаев .bat не заканчивает выполнения, а ждёт завершения этой команды (которая работать будет несколько часов) и не закрывает своё окно, которое зачет-то открыл.
Таким образом, для немедленного завершения .bat файла приходится использовать команду start, иначе никак. Однако команда
start /b myprog.exe > myfile.txt
будет делать не то, что нужно, так как поток перенаправится от команды start, а не от myprog.exe, как нужно.
Единственной возможностью остаётся вложить команду cmd в команду start так.
start /b cmd /c "myprog.exe > myfile.txt"
По описаниям в помощи это должно делать то, что нужно, однако почему-то окно всё равно не закрывается.
Вообще непонятно, зачем понадобилось открывать окно по умолчанию и создавать такие сложности, чтобы его специально закрыть. В OS Linux всё наоборот. По умолчанию окна нет, если оно нужно, то отдельной опцией это указывается. В OS Linux требуемое действие делается очень просто так.
myprog > myfile &
У каждой из этих двух команд есть преимущества и недостатки, но сделать то, что нужно не получается даже комбинируя их.
Ещё хочу заметить, что очень глупо открывать консольное окно при выполнении программы и не закрывать его, так как оно не всегда нужно. В моём случае закрытие окна вручную не приводит к завершению работы запущенной программы, а просто создаёт пользователю лишние трудности по закрыванию окна. Нужно избавить пользователя от ненужной работы.
Я уже долго мучался сам, советовался с друзьями, но никто не может помочь. Обращаюсь теперь к вам в надежде, что фирма Microsoft всё же лучше знает, как использовать возможности её командной строки для достижения нужного результата. Если ВЫ не поможете, больше обращаться мне не к кому. Это ВАШ программный продукт, всё что можно почерпнуть из помощи по этим командам, я прочитал, но там практически нет ничего нужного.
Помогите, пожалуйста, написать одну строку с командой, но правильно, чтобы она делала то, что нужно. Заранее спасибо.
Пакетные файлы (.BAT) и файлы командного сценария Windows NT (.CMD) запускаются в окне консоли при двойном щелчке. Это означает, что окно командной строки будет отображаться до тех пор, пока не завершится выполнение файла .BAT или .CMD.
Чтобы сделать выполнение файлов .BAT или .CMD менее навязчивым, вы можете настроить его на минимизированный запуск. Или, если файл .BAT или .CMD не требует ввода данных пользователем во время выполнения, вы можете запустить его в невидимом режиме с помощью скрипта.
Встроенный планировщик задач в Windows способен запускать программы в скрытом режиме. Если вы не хотите переходить через маршрут планировщика заданий, ознакомьтесь с параметрами, описанными в этой статье.
- Запустите пакетный или CMD-файл в режиме свернутого окна
- Запустить пакетный или CMD-файл скрытым (невидимый режим) через Windows Script
- Запустите скрытый пакетный или CMD-файл (невидимый режим) с помощью утилиты NirCmd
Запуск файлов .BAT или .CMD в свернутом режиме
Чтобы запустить пакетный файл в свернутом состоянии окна, выполните следующие действия:
Запуск скрытых файлов .BAT или .CMD (невидимый режим) с помощью скрипта
Метод запуска Windows Script Host позволяет запускать программу или сценарий в невидимом режиме. Вот пример кода сценария Windows, который запускает командный файл с именем syncfiles.bat невидимо.
Ссылка: метод запуска. Установка параметра intWindowStyle в 0 скрывает окно.
Допустим, у нас есть файл с именем syncfiles.bat в C:\Batch Files каталог. Давайте запустим его в скрытом режиме, используя Windows Scripting.
-
Скопируйте следующие строки в Блокнот.
Заметка: Замените имя / путь пакетного файла соответственно в сценарии в соответствии с вашими требованиями.
СВЯЗАННЫЙ: Как автоматически поднять пакетный файл, чтобы запустить его от имени администратора? и VBScripts и повышение прав UAC (запуск от имени администратора)
Запуск скрытых файлов .BAT или .CMD (невидимый режим) с помощью NirCmd
Мы можем использовать NirCmd для запуска программы, скрипта или командного файла в скрытом режиме.
Загрузите NirCmd и распакуйте файл в каталог Windows.
В диалоговом окне «Выполнить» или в командной строке используйте следующий синтаксис для запуска пакетного файла или программы в скрытом режиме:
Пример:
Если вам нужно запустить пакетный файл с повышенными правами (от имени администратора), используйте следующую команду:
Это оно! Если вам известен какой-либо другой способ запуска пакетного или CMD-файла в скрытом режиме, сообщите нам об этом.
Есть ли способ скрыть окно консоли при выполнении консольного приложения?
В настоящее время я использую приложение Windows Forms для запуска консольного процесса, но я не хочу, чтобы окно консоли отображалось во время выполнения задачи.
Если вы написали консольное приложение, вы можете сделать его скрытым по умолчанию.
Если вы используете Process Class, вы можете написать
до yourprocess.start(); , и процесс будет скрыт
Вы можете использовать API FreeConsole, чтобы отсоединить консоль от процесса:
(конечно, это применимо только в том случае, если у вас есть доступ к исходному коду приложения)
Если вы заинтересованы в выходе, вы можете использовать эту функцию:
Он запускает заданную программу командной строки, ждет ее завершения и возвращает результат как строку.
Если вы создаете программу, которая не требует ввода пользователя, вы всегда можете просто создать ее как службу. Служба не будет показывать какой-либо пользовательский интерфейс.
Я знаю, что не отвечаю точно, что вы хотите, но мне интересно, задаете ли вы правильный вопрос.
Почему бы вам не использовать:
- служба Windows
- создайте новый поток и запустите процесс на
Звучат как лучшие параметры, если вы хотите только запустить процесс.
Добавьте это в свой класс, чтобы импортировать DLL файл:
И затем, если вы хотите скрыть его, используйте следующую команду:
И если вы хотите показать консоль:
Основываясь на ответе Адама Марковица выше, после меня работало:
У меня есть общее решение, которым можно поделиться:
Просто включите этот класс в свой проект и вызовите Magician.DisappearConsole(); ,
Консоль будет мигать при запуске программы, нажав на нее. При выполнении из командной строки командная строка исчезает вскоре после выполнения.
Я делаю это для Discord Bot, который работает вечно на заднем плане моего компьютера как невидимый процесс. Это было проще, чем заставить TopShelf работать на меня. Несколько учебников TopShelf не помогли мне, прежде чем я написал это с помощью кода, который я нашел в другом месте. ;П
У меня есть запланированное задание, которое запускает пакетный скрипт, который запускается robocopy каждый час. Каждый раз, когда он запускается, на рабочем столе появляется окно с выводом robocopy, которое я не очень хочу видеть.
Мне удалось заставить окно выглядеть свернутым, запустив запланированное задание
но это дает мне новое окно команд каждый час. Я был удивлен этим, учитывая cmd /c «Выполняет команду, указанную в строке, а затем завершается» - я, должно быть, неправильно понял документы.
Есть ли способ запустить пакетный скрипт без его появления окна cmd?
и запланировать это. Второй аргумент в этом примере устанавливает стиль окна. 0 означает «скрыть окно».
Аргументы:
- объект: объект WshShell.
- strCommand: строковое значение, обозначающее командную строку, которую вы хотите запустить. Вы должны включить любые параметры, которые хотите передать в исполняемый файл.
- intWindowStyle: Необязательно. Целочисленное значение, указывающее внешний вид окна программы. Обратите внимание, что не все программы используют эту информацию.
- bWaitOnReturn: необязательно. Логическое значение, указывающее, должен ли скрипт ждать завершения программы, прежде чем перейти к следующему оператору в вашем скрипте. Если установлено значение true, выполнение сценария останавливается до завершения программы, и Run возвращает любой код ошибки, возвращенный программой. Если установлено значение false (по умолчанию), метод Run возвращается сразу после запуска программы, автоматически возвращая 0 (не следует интерпретировать как код ошибки).
Вы запускаете это как запланированное задание? Если это так, установите его для запуска под другой учетной записью пользователя, тогда он не будет виден вошедшему в систему пользователю. Если сценарию не нужен сетевой доступ к элементам, для которых требуется проверка подлинности Windows (например, к общим папкам или принтерам), вы можете запустить его как «nt полномочия \ система» и оставить пароль пустым. В Windows 7 просто установите для пользователя значение SYSTEM и нажмите ОК.
(Вы, вероятно, должны использовать реального пользователя, хотя, если вы используете robocopy . )
Спасибо - это было меньше хлопот для меня, чем вариант .vbs. Я установил для пользователя «Запуск от имени» значение «СИСТЕМА» (которое впоследствии изменилось на «NT AUTHORITY \ SYSTEM»), и это сработало для меня. Я больше не вижу всплывающее окно CMD при выполнении запланированной задачи. Спасибо! +1, это элегантно. Обязательно введите «system» в качестве имени пользователя, тогда win7 сделает все остальное за вас. Обратите внимание, что вы действительно получаете сетевой доступ к Интернету, а не к сетевым ресурсам и тому, что требует аутентификации Windows. Пользователь системы прост и элегантен, отличный СОВЕТ! +1! См. Реализация административных моделей с наименьшими привилегиями . Является ли использование Системной учетной записи нарушением политик с наименьшими привилегиями? Если это так, то администраторы должны знать, чтобы не делать этого в большинстве ситуаций.Просто настройте запланированную задачу как «Запускать, вошел ли пользователь в систему или нет».
Отлично! Вы даже можете отключить хранилище учетных данных, и тогда это станет более безопасным, чем запуск системы SYSTEM!Вы также можете попробовать CHP (Создать скрытый процесс) , который делает именно то, что вы думаете .
Запускается без командного окна. Отлично! Сделано теми же людьми, что и CMDOW, но это более уместно.
Прекрасно работает, когда вам нужно запустить задачу в контексте вошедшего в систему пользователя («Триггер: при подключении к сеансу пользователя», «Запускать задачу как: пользователи»)CMDOW - это потрясающий инструмент, который позволяет вам делать множество вещей с окнами из командной строки.
Одна из самых простых вещей - скрыть текущее окно (обычно как первую строку в файле bat) с помощью:
или начать новый скрытый процесс с
И это, и предложение Rocketmonkeys предполагают загрузку новых инструментов, что означает большую совместимость с настольными компьютерами разных людей. Запекать, используя команды Windows, гораздо лучше. Плюс cmdow определяется как «опасный» некоторыми антивирусными программами (это не опасно, но само обнаружение может вызвать некоторые проблемы, если файл cmdow помещен на карантин . ). есть еще всплывающая консоль, просто прошить очень быстро.Попробуйте вызвать скрипт с
Это не работает, «Запланированная задача» -> «Состояние» означает «Не удалось запустить», то есть: start / b C: \ file.bat: и: start / b «C: \ file.bat»: но: C: \ file.bat: работает просто отлично. Потому что start это не программа, это команда. Вам нужно указать cmd как программу для запуска и /c start /b <file> как аргумент. Тем не менее, это все равно не сработает, потому что оно все равно создаст консольное окно cmd и высветит черное окно на экране. Можно также подтвердить с помощью @Synetech, что это не создаст новое окно, но вам все равно нужно открыть консольное окно, чтобы запустить его. Это действительно удобная команда, но ее нельзя использовать в соответствии с запросом запланированных задач.Вы можете создать ярлык для командного файла, установить ярлык для запуска свернутым (в свойствах ярлыка, вкладка «Ярлык»), а затем настроить задание для запуска ярлыка.
Важное замечание : Вам необходимо указать путь к ярлыку вручную, введя его в текстовое поле «Выполнить» с расширением «.lnk»; если вы просто попытаетесь перейти к нему, он услужливо перенаправит себя к тому, на что указывает ярлык.
Это не работает на Windows 10 x64, это дает всплывающее окно "Как вы хотите открыть этот файл?"Я понимаю, что на этот вопрос уже было дано достаточно хорошее разрешение, которое присуще Windows, и поэтому должно быть наиболее совместимым, и я полностью согласен.
Я также хотел сказать, что я не согласен с комментарием @ splattne (но не с его реальным ответом) - что разрешение в другой упомянутой теме заслуживает доверия. Этот ответ включает запуск сценария от имени другого пользователя (SYSTEM), что в значительной степени эквивалентно предоставлению корневого доступа сценария. Это также не удастся для заданий, таких как ROBOCOPY (на что ссылается Джон Ренни), которые требуют доступа к сети.
Я никогда CMDOW раньше не пробовал , но я хотел бы предложить другое подобное разрешение, которое [хотя и не установлено в Windows], по-прежнему легко переносимо для большинства версий и поставляется как в 32-, так и в 64-битных версиях, и это NirCmd .
NirCmd - очень мощный инструмент, имеющий множество опций, наиболее полезной из которых я лично считаю, что он способен запускать скрытые командные окна, просто выполняя следующее:
Запускает приложение и, при необходимости, указывает один или несколько параметров командной строки для исполняемого приложения. Параметр [show / hide / min / max] указывает, будет ли запущенное приложение видимым или нет. Если указано «скрыть», запущенное приложение не будет видимо пользователю. Если указано «max», окно запущенного приложения будет развернуто. Если указано «min», окно запущенного приложения будет свернуто.
РЕДАКТИРОВАТЬ: я пытался запустить ROBOCOPY задание и попробовал метод в этом ответе, и он не работал, даже после редактирования прав доступа к сети. Я попытался дважды щелкнуть сценарий и не смог заставить его работать, но смог запустить его только в командной строке с повышенными привилегиями. Я создал ярлык для командного файла и запустил его от имени администратора и смог запустить его, дважды щелкнув по нему, но метод, который я использовал, заключался в том, чтобы запустить его скрытым как SYSTEM (я знаю, я знаю) - но он действительно работает ROBOCOPY , если он имеет правильные права доступа к пакетному файлу.
Читайте также: