Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/15: Рейтинг темы: голосов - 15, средняя оценка - 4.93
6 / 6 / 0
Регистрация: 09.10.2013
Сообщений: 251
1

Ошибка при скрытии консольных окон с nircmd.exe

04.04.2020, 15:19. Показов 3106. Ответов 10

Author24 — интернет-сервис помощи студентам
С помощью данного батника запускаю программы RegWorkshop от имени Система с учетом разрядности программы, и все работает хорошо. Но когда нужно запустить подобный файл от имени Пользователя то nircmd.exe начинает скрывать саму программу RegWorkshop. Помогите пожалуйста исправить ошибку.

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
@echo on
 
if "%PROCESSOR_ARCHITEW6432%"=="AMD64" goto launch64
if "%PROCESSOR_ARCHITECTURE%"==""      set PROCESSOR_ARCHITECTURE=x86
if "%PROCESSOR_ARCHITECTURE%"=="x86"   goto launch32
if "%PROCESSOR_ARCHITECTURE%"=="AMD64" goto launch64
goto endorunknwn
 
:launch32
 
 .\link\nircmd.exe exec hide ^
 .\link\PsExec.exe -i -d -s ^
 "%~dp0RegWorkshop.exe"
 
goto endorunknwn
 
:launch64
 
 .\link\nircmd64.exe exec hide ^
 .\link\PsExec64.exe -i -d -s ^
 "%~dp0RegWorkshopX64.exe"
 
:endorunknwn
Удаляю из файла эти строки …и nircmd.exe начинает скрывать саму программу RegWorkshop.

Windows Batch file
1
.\link\PsExec.exe -i -d -s ^
Windows Batch file
1
.\link\PsExec64.exe -i -d -s ^
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.04.2020, 15:19
Ответы с готовыми решениями:

Ошибка при скрытии объектов при смене значения ComboBox
procedure TForm1.ComboBox2Change(Sender: TObject); begin case combobox2.ItemIndex of 0:...

Ошибка при скрытии строк в подчиненном справочнике
Есть два справочника главный справочник. и Справочник со статусами. Необходимо из головного...

Nircmd.exe shortcut
Как создать такой ярлык: "C:\Program Files\Mozilla Firefox\firefox.exe" -no-remote -p 1...

Утилита NirCmd.exe
В сообщениях увидел очень полезную утилиту NirCmd.exe Но к сожалению английским не владею, а...

10
4334 / 2124 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
04.04.2020, 15:57 2
или положите nircmd в конкретное место и указывайте абсолютный путь к нему или для nircmd давайте скрыть конкретное окно того что нужно.
0
6228 / 2670 / 1051
Регистрация: 06.06.2017
Сообщений: 9,127
04.04.2020, 16:45 3
Beer-Sheva, а зачем тут вообще launch32? 32-битки должны и с x64 запускаться. X64 можно записать в переменную и подставлять в имени.
И если хочется всё поскрывать, то батник тут явно лишний. Логичней делать на vbs/js или спецпрогах типа ExecAs/RunAsTool.
Цитата Сообщение от Beer-Sheva Посмотреть сообщение
Но когда нужно запустить подобный файл от имени Пользователя
Так а зачем для запуска nircmd вообще? Всё и так должно запускаться:
Windows Batch file
1
if "%PROCESSOR_ARCHITEW6432%"=="AMD64" (RegWorkshopX64.exe) else RegWorkshop.exe
0
6 / 6 / 0
Регистрация: 09.10.2013
Сообщений: 251
04.04.2020, 17:58  [ТС] 4
Цитата Сообщение от FlasherX Посмотреть сообщение
а зачем тут вообще launch32?
Этот код взят здесь http://forum.ixbt.com/topic.cgi?id=23:44121:16#16

Добавлено через 50 минут
Цитата Сообщение от FlasherX Посмотреть сообщение
Так а зачем для запуска nircmd вообще?
Чтобы скрыть окна от батника.
0
4334 / 2124 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
04.04.2020, 18:13 5
Цитата Сообщение от Beer-Sheva Посмотреть сообщение
Чтобы скрыть окна от батника
но сам nircmd тоже надо откуда-то запускать, до того как он что-то скроет. Можно из планировщика, например. А можно просто с помощью "bat to exe" конвертировать bat в exe с указанием скрытого запуска, тогда окно cmd вы точно не увидите.
0
6228 / 2670 / 1051
Регистрация: 06.06.2017
Сообщений: 9,127
04.04.2020, 18:56 6
Лучший ответ Сообщение было отмечено Beer-Sheva как решение

Решение

Цитата Сообщение от Beer-Sheva Посмотреть сообщение
Чтобы скрыть окна от батника.
Я же написал, что батник вообще тут бессмысленен:
Visual Basic
1
2
3
With CreateObject("WScript.Shell")
  If .Environment("System")("PROCESSOR_ARCHITECTURE") = "x86" Then .Run "RegWorkshop.exe" Else .Run "RegWorkshopX64.exe"
End With
1
6 / 6 / 0
Регистрация: 09.10.2013
Сообщений: 251
04.04.2020, 23:27  [ТС] 7
Цитата Сообщение от FlasherX Посмотреть сообщение
Так а зачем для запуска nircmd вообще?
С этого сайта http://www.outsidethebox.ms/10539/#_Toc277326816 я взял код запуска редактора реестра от имени Система, но консольное окно постоянно весело открытым.
Windows Batch file
1
psexec -i -s regedit
Потом я добавил утилиту nircmd.exe чтобы скрыть консольное окно, и это работало когда нужно было запустить редактор реестра от имени Система
Windows Batch file
1
nircmd.exe exec hide psexec -i -s regedit
Сегодня посмотрел оф справку psexec https://docs.microsoft.com/en-... ads/psexec
и там советуют дополнительный ключ -d, и как оказалось что если исключить утилиту nircmd.exe то консольное окно появляется на одну секунду и само закрывается. Так что nircmd.exe не нужна и вы оказались правы!
Windows Batch file
1
psexec -i -d -s regedit
Далее я убрал ключ -s который дает запуск от имени Система, и редактор запустился от текущего Пользователя!
Windows Batch file
1
psexec -i -d regedit
Если у вас есть более простой и надежный код батника для запуска редактора реестра от имени Система с помощь утилиты psexec с учетом выбора разрядности оси и самого редактора реестра …то буду очень благодарен за любую помощь!
0
6228 / 2670 / 1051
Регистрация: 06.06.2017
Сообщений: 9,127
05.04.2020, 03:47 8
Лучший ответ Сообщение было отмечено Beer-Sheva как решение

Решение

Beer-Sheva, вы написали, что от системы у вас и так "все работает хорошо", а далее в 3 посте я процитировал запрос на запуск от пользователя. Так вот смысла в psexec при запуске от текущего пользователя ровно столько же, сколько в nircmd, т. е. его нет. Запуск от разрядности я и так привёл в двух вариантах (с/без консоли).
Конкретно для запуска regedit вообще ничего кроме самой команды не требуется. Запустится ровно тот, который соответствует разрядности родительского процесса.
Для локального запуска же RegWorkshop от системы лучше как раз использовать nircmd вместо pcexec. Опять же vbs:
Visual Basic
1
2
3
4
5
6
7
8
'————————— Путь к утилитам без расширения ————————
NirCmd = "C:\Path\To\NirCmd\nircmd"
RegWorkshop = "C:\Path\To\RegWorkshop\RegWorkshop"
'—————————————————————————————————————————————————
With CreateObject("WScript.Shell")
  If .Environment("System")("PROCESSOR_ARCHITECTURE") <> "x86" Then n64 = 64: x = "x"
  .Run """" & NirCmd & n64 & ".exe"" elevatecmd runassystem """ & RegWorkshop & x & n64 & ".exe"""
End With
На x64 системе запуск нужно производить только из 64-битных приложений, если использование программы на x32 не устраивает, иначе в 6 строке System меняем на Process.
1
6 / 6 / 0
Регистрация: 09.10.2013
Сообщений: 251
05.04.2020, 09:36  [ТС] 9
Запуск от имени система выдает ошибку строка:7, символ:3
Visual Basic
1
2
3
4
5
6
7
8
'————————— Путь к утилитам без расширения ————————
NirCmd = "C:\Users\Uzzer\Tools_Servis\System\Registry Workshop\Link"
RegWorkshop = "C:\Users\Uzzer\Tools_Servis\System\Registry Workshop"
'—————————————————————————————————————————————————
With CreateObject("WScript.Shell")
  If .Environment("System")("PROCESSOR_ARCHITECTURE") <> "x86" Then n64 = 64: x = "x"
  .Run """" & NirCmd & n64 & ".exe"" elevatecmd runassystem """ & RegWorkshop & x & n64 & ".exe"""
End With
Вот пути ко всем утилитам (хотя я думаю что лучше их положить в одну папку с Registry Workshop, чтобы не прописывать пути)

C:\Users\Uzzer\Tools_Servis\System\Registry Workshop\Link\nircmd.exe
C:\Users\Uzzer\Tools_Servis\System\Registry Workshop\Link\nircmd64.exe
C:\Users\Uzzer\Tools_Servis\System\Registry Workshop\RegWorkshop.exe
C:\Users\Uzzer\Tools_Servis\System\Registry Workshop\RegWorkshopX64.exe


Запуск с командной строки нормально запускает RegWorkshop от имени Система(все программы в одной папке)
Windows Batch file
1
nircmd64.exe elevatecmd runassystem RegWorkshopX64.exe
Добавлено через 25 минут
Нашел свою ошибку! Я указал адрес только до каталога с утилитами)))
Visual Basic
1
2
NirCmd = "C:\Users\Uzzer\Tools_Servis\System\Registry Workshop\Link\NirCmd"
RegWorkshop = "C:\Users\Uzzer\Tools_Servis\System\Registry Workshop\RegWorkshop"
Добавлено через 1 час 4 минуты
Можно ли удалить пути до утилит что то вроде этого?
Visual Basic
1
2
3
4
5
6
7
8
'————————— Путь к утилитам без расширения ————————
NirCmd = "NirCmd"
RegWorkshop = "RegWorkshop"
'—————————————————————————————————————————————————
With CreateObject("WScript.Shell")
  If .Environment("System")("PROCESSOR_ARCHITECTURE") <> "x86" Then n64 = 64: x = "x"
  .Run """" & NirCmd & n64 & ".exe"" elevatecmd runassystem """ & RegWorkshop & x & n64 & ".exe"""
End With
0
6228 / 2670 / 1051
Регистрация: 06.06.2017
Сообщений: 9,127
05.04.2020, 12:06 10
Цитата Сообщение от Beer-Sheva Посмотреть сообщение
Можно ли удалить пути до утилит что то вроде этого?
Можно, если скрипт запускается из Registry Workshop\. Только тогда:
Visual Basic
1
NirCmd = "Link\NirCmd"
1
6 / 6 / 0
Регистрация: 09.10.2013
Сообщений: 251
05.04.2020, 12:16  [ТС] 11
FlasherX, Большое спасибо за вашу помощь!
0
05.04.2020, 12:16
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.04.2020, 12:16
Помогаю со студенческими работами здесь

nircmd.exe monitor off
На своём ПК выполняю команду wmic /node:&quot;localhost&quot; process call create &quot;cmd /c nircmd.exe...

Автозапуск сторонних программ, консольных окон и т.д
Вот ссылка на проблему, детально: https://www.cyberforum.ru/windows/thread1754200.html Логи же...

Запуск консольных команд cmd.exe
Здравствуйте. Имеется несколько .bat файлов, которыми я иногда пользуюсь. Хочется запихнуть их в...

Прекращается цикл при скрытии формы
Всем привет. Такая проблема: когда скрываю первую форму и в ней выполняется цикл, он прекращается....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru