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

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

Ответить
Настройки темы
CMD/BAT - Скрыть консольное окно, не ломая конструкцию

Аватара для Nun-Nun

Ветеран


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


Конфигурация

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


При деинсталляции программы из Inf-файла запускается батник: CMD.exe /c "%24%\%PROG_DIR%\SetPath.cmd Del"
Содержимое батника:
Код: Выделить весь код
@Echo Off
SetLocal EnableDelayedExpansion

Set InstPath=%SystemDrive%\My_Program

Set sw="HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"
For /F "tokens=2*" %%j In ('Reg Query %sw% /v Path ^| Find /I "Path"') Do Set type=%%j& Set curpath=%%k
Echo "%curpath%" | Find /I "%InstPath%" >Nul && Goto _Del

If /I %~1#==Del# Pause>Nul & Exit
Reg Add %sw% /v Path /t %type% /d "%curpath%;%InstPath%" /f
nircmdc sysrefresh environment
Exit

:_Del
If /I %~1#==Add# Pause>Nul & Exit
Reg Add %sw% /v Path /t %type% /d "!curpath:;%InstPath%=!" /f
nircmdc sysrefresh environment
Exit
Всё прекрасно отрабатывает, но во время деинсталляции ненадолго появляется консольное окно (насколько понимаю, из-за команды: Echo "%curpath%" | Find /I "%InstPath%" >Nul && Goto _Del ). Недостаток чисто косметический, но убрать хотелось бы (желательно, не ломая рабочую конструкцию).

Отправлено: 23:04, 29-04-2013

 

Ветеран


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

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


Если используется nircmd, то можно так (пример)
Код: Выделить весь код
@echo off

title mybatch
nircmdc win hide title "mybatch"

timeout /t 5

nircmdc win show title "mybatch"
pause

Отправлено: 23:17, 29-04-2013 | #2



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

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


Аватара для Nun-Nun

Ветеран


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

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


Foreigner,

Честно говоря, не понял как это может сработать. Если прописываю это в самом батнике, то бесполезно, т.к. команда Echo вызовет консольное окно и оно хотя и малозаметно, но всё равно мелькнёт. Если это должно быть в inf-е
Код: Выделить весь код
title mybatch
nircmdc win hide title "mybatch"
, то не представляю как это туда запихать, это ж не батник.

-------
Свобода не означает вседозволенность.


Последний раз редактировалось Nun-Nun, 29-04-2013 в 23:51.


Отправлено: 23:40, 29-04-2013 | #3


Ветеран


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

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


Окно консоли порождает сам процесс cmd.exe, безо всякой связи с наличием/отсутствием «echo».

Цитата Nun-Nun:
При деинсталляции программы из Inf-файла запускается батник: CMD.exe /c "%24%\%PROG_DIR%\SetPath.cmd Del" »
Вместо запуска пакетного файла:
Код: Выделить весь код
CMD.exe /c "%24%\%PROG_DIR%\SetPath.cmd Del"
используйте вызов «nircmd.exe», например, с командой execmd, которой передавайте в качестве параметра Ваш пакетный файл.
Это сообщение посчитали полезным следующие участники:

Отправлено: 09:24, 30-04-2013 | #4


Аватара для Nun-Nun

Ветеран


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

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


Iska,

Не всё так просто, как хотелось бы. Как оказалось проблема несколько сложнее. Изначально в inf-файле запускается три процесса с cmd.exe:
Код: Выделить весь код
[PNF.Files]
CMD.exe /c "Del /q /f %17%\%NAME_INF%.pnf"
CMD.exe /c "Del /q /f %17%\%NAME_INF%.inf"

[PROG.DelSetPath]
CMD.exe /c "%24%\%PROG_DIR%\SetPath.cmd Del"
Замена CMD.exe /c "%24%\%PROG_DIR%\SetPath.cmd Del" на "%24%\%PROG_DIR%\NirCMDc.exe" execmd "%24%\%PROG_DIR%\SetPath.cmd" решается легко, а вот с двумя другими аналогичный фокус не проходит, т.к. NirCMDc.exe входит в комплект удаляемой программы и удаляется вместе со всеми остальными компонентами при деинсталляции.
Код: Выделить весь код
"%24%\%PROG_DIR%\NirCMDc.exe" execmd Del /q /f "%17%\%NAME_INF%.pnf"
"%24%\%PROG_DIR%\NirCMDc.exe" execmd Del /q /f "%17%\%NAME_INF%.inf"
В итоге, во-первых, появляется сообщение о том, что NirCMDc.exe не найден (что и не удивительно), во-вторых inf- и pnf-файл остаются неудалёнными. Тут, насколько вижу, нужно ломать организацию всего inf-а, чего делать не хотелось бы, т.к. полезут другие проблемы.

-------
Свобода не означает вседозволенность.


Отправлено: 11:56, 30-04-2013 | #5


Ветеран


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

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


Nun-Nun, во-первых, не «nircmdc.exe», а «nircmd.exe». «nircmdc.exe» — как раз консольная версия утилиты. Во-вторых — помещайте его в «%SystemRoot%» при установке и не удаляйте впоследствии. Третий путь, если таки хотите держать его в папке приложения — «PendMoves»: задать удаление файла «nircmd.exe» и удаление папки не тотчас же, а при очередной перезагрузке.

Отправлено: 13:19, 30-04-2013 | #6


Аватара для gora

Ушёл из жизни


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

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


Nun-Nun, для удаления файлов нет необходимости использовать батник, inf файлы это умеют сами, без сторонних утилит. Удаление файлов и директорий
Для скрытия окон в inf файле есть флаги. Последовательное выполнение списка команд (AdvancedINF)

Руководство по работе с INF-файлами

Отправлено: 13:36, 30-04-2013 | #7


Ветеран


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

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


То-то ж, не пользуешься — не знаешь .

Отправлено: 13:56, 30-04-2013 | #8


Аватара для Nun-Nun

Ветеран


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

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


Цитата gora:
для удаления файлов нет необходимости использовать батник, inf файлы это умеют сами, без сторонних утилит...
...Для скрытия окон в inf файле есть флаги...»
Благодарю, я знаю об этом. Первоначально так и было сделано, но почему-то при деинсталляции не удалялся pnf-файл, что-то в системе его держало, поэтому и пришлось городить огород с cmd.exe.
Цитата Iska:
Во-вторых — помещайте его в «%SystemRoot%» при установке и не удаляйте впоследствии.»
Об этом я тоже думал. Конечно на своём ПК это допустимо, а на чужих как-то не красиво.
Цитата Iska:
Третий путь, если таки хотите держать его в папке приложения — «PendMoves»: задать удаление файла «nircmd.exe» и удаление папки не тотчас же, а при очередной перезагрузке.»
Как раз над этим сейчас и думаю. Спасибо.

-------
Свобода не означает вседозволенность.


Отправлено: 16:21, 30-04-2013 | #9


Аватара для gora

Ушёл из жизни


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

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


Nun-Nun, батник можно запаковать в hide SFX с использованием "маленьких" модулей (SetTools), размер будет даже меньше чем у nircmd.
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:46, 01-05-2013 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Как скрыть консольное окно? 7human7 Скриптовые языки администрирования Windows 39 30-03-2018 17:29
[решено] AutoIt:как не только запустить прогу вместе с пу, но и скрыть ее окно. Димончик555 AutoIt 2 26-11-2011 02:11
Скрыть всплывающее окно ... FlatX007 AutoIt 9 30-05-2009 22:32
Как узнать пароль root , не ломая систему? Slider Общий по Linux 23 29-08-2004 17:39
Скрыть окно Hard Программирование и базы данных 4 27-09-2002 09:14




 
Переход