Вверх ↑
Этот топик читают: zhorik5, Гость
Ответов: 36
Рейтинг: 0
#1: 2025-03-25 08:22:05 ЛС | профиль | цитата
Добрый день, гуру!
Не получилось продолжить ветку https://usermap.hiasm.com/topic/63603 (Как запустить cmd.exe от имени администратора?) напишу здесь:

Есть предложение по изменеию компонента WinExec.
Считаю, что будет полезным (мне не хватает) добавление возможности запуска от имени другого пользователя и других компонентов (DoShellExec, DoConsoleExec, DoRunCpl).
Как вариант, можно добавить свойство "RunAsUser" (1/0). При RunAsUser=1, читать свойства "UserName" и "Password" при запуске объекта любого типа.
карма: 0

0
Ответов: 207
Рейтинг: 2
#2: 2025-03-30 20:34:02 ЛС | профиль | цитата
Задам глупый вопрос, а user и password в компоненте WinExec пробовал заполнять?


Было бы проще если бы иметь хоть какое-нибудь описание цели запуска CMD от имени администратора.

Короче попробовал я запустить банально SFC /scannow с помощью WinExec требует повышения прав. Я и пользователя создал, добавил во все админ группы и не только. И пробовал запускать ярлык в котором стоит галочка запуска с наивысшими правами. И bat файл делал, короче не запустился....
единственное что я не пробовал это понизить UAC скорее всего проблема решится.но это не точно)))

Редактировалось 1 раз(а), последний 2025-03-30 22:09:50
карма: 0

0
Ответов: 4650
Рейтинг: 760
#3: 2025-03-30 21:38:12 ЛС | профиль | цитата
Думаю, можно добавить отдельный метод для консоли doConsoleExecAsUser. И то я не уверен, может ли ограниченный процесс запустить другой с повышенными привилегиями и обмениваться с ним данными через каналы ввода-вывода.
Для doShellExec аналога не существует, заменяется обычным doRunAsUser с именем документа в командной строке.
карма: 26

0
Ответов: 36
Рейтинг: 0
#4: 2025-03-31 10:28:02 ЛС | профиль | цитата
Было бы проще если бы иметь хоть какое-нибудь описание цели запуска CMD от имени администратора

Цель запуска CMD от имени администратора нужна для выполнения требующих этого задач без перелогинивания в другую учетку.
Мы (техподдержка) администрируем кассовые компьютеры (POS-терминалы) на которых работает кассир с торгово-учетной программой под обычным пользователем.
Например из командной строки мы лечим систему той же SFC или CHKDSK. А из панели управления настраиваем принтеры (CONTROL PRINTERS) или сеть (NCPA.CPL) и прочее.
В настоящее время решаем, как запустить апплет NCPA.CPL с повышенными привилегиями. В противном случае система на дает открыть свойства сетевого подключения.
Ниже приведен пример из которого видно, что ни один из методов не позволяет открыть NCPA.CPL с повышенными привилегиями. Панель открывается либо от обычного пользователя (ShellExec, RunCpl), либо вооще не открываеся (Exec, ConsoleExec, RunAsUser).
Помещение команды в пакетный файл так же не дает нужного результата:
Не запускается методами: AsUser, RunCpl
От обычного пользователя: Exec, ShellExec, ConsoleExec

Думаю, можно добавить отдельный метод для консоли doConsoleExecAsUser

Это частично решит вопрос, но как быть с запуском апплетов cpl от имени администратора?


Add(MainForm,2953706,168,189)
{
Width=481
Height=199
Position=1
}
Add(Button,16273687,168,287)
{
Left=20
Top=20
Width=91
Caption="DoExec"
link(onClick,14790517:doExec,[])
}
Add(WinExec,14790517,364,287)
{
Action=""
Point(UserName)
Point(Password)
Point(WorkingDir)
Point(doConsoleExec)
Point(doRunAsUser)
Point(doRunCpl)
link(FileName,10092216:Text,[(370,254)(342,254)])
link(UserName,1116111:Text,[])
link(Password,8672293:Text,[(391,254)(426,254)])
}
Add(Edit,1116111,378,189)
{
Left=193
Top=46
Width=114
Text="testuser"
}
Add(Edit,8672293,420,189)
{
Left=192
Top=68
Width=114
Text="testpassword"
}
Add(Edit,10092216,336,189)
{
Left=192
Top=20
Width=250
Text="ncpa.cpl"
}
Add(Button,7717896,168,322)
{
Left=20
Top=44
Width=91
Caption="DoShellExec"
link(onClick,14790517:doShellExec,[(282,328)(282,300)])
}
Add(Button,9019614,168,357)
{
Left=20
Top=68
Width=91
Caption="DoConsoleExec"
link(onClick,14790517:doConsoleExec,[(291,363)(291,307)])
}
Add(Button,2428001,168,392)
{
Left=20
Top=92
Width=91
Caption="DoRunAsUser"
link(onClick,14790517:doRunAsUser,[(302,398)(302,314)])
}
Add(Button,16645780,168,427)
{
Left=20
Top=116
Width=91
Caption="DoRunCpl"
link(onClick,14790517:doRunCpl,[(312,433)(312,321)])
}
Add(Label,2000072,378,140)
{
Left=128
Top=48
Width=30
Height=17
Caption="Login"
}
Add(Label,10152912,420,140)
{
Left=128
Top=72
Height=17
Caption="Password"
}
Add(Label,9168649,336,140)
{
Left=128
Top=24
Width=48
Height=17
Caption="FileName"
}

карма: 0

0
Ответов: 876
Рейтинг: 187
#5: 2025-03-31 11:25:29 ЛС | профиль | цитата
sansey73 писал(а):
Это частично решит вопрос, но как быть с запуском апплетов cpl от имени администратора?

А так разве не запускается?

Add(MainForm,2953706,168,105)
{
link(onCreate,11113223:doShellExec,[])
}
Add(WinExec,11113223,224,112)
{
FileName="cmd"
Param="/c ncpa.cpl"
Action="runas"
Point(onErrorExec)
Point(onConsoleResult)
Point(onConsoleError)
}

карма: 18

0
Ответов: 36
Рейтинг: 0
#6: 2025-03-31 12:18:20 ЛС | профиль | цитата
А так разве не запускается?

Запускается, но без повышенного приоритета
карма: 0

0
Ответов: 876
Рейтинг: 187
#7: 2025-03-31 13:06:05 ЛС | профиль | цитата
sansey73 писал(а):
Запускается, но без повышенного приоритета

У меня на обоих компьютерах запускается от имени администратора.
Вот схема для тестов.

Add(MainForm,3152432,63,28)
{
link(onCreate,11105470:doEvent1,[])
}
Add(WinExec,11113223,154,35)
{
FileName="cmd"
Action="runas"
Point(onErrorExec)
Point(onConsoleResult)
Point(onConsoleError)
}
Add(WinExec,5649892,154,84)
{
FileName="cmd"
Point(onErrorExec)
Point(onConsoleResult)
Point(onConsoleError)
}
Add(Hub,11105470,112,42)
{
link(onEvent1,11113223:doShellExec,[])
link(onEvent2,5649892:doShellExec,[(144,55)(144,97)])
}


Выглядит это так

карма: 18

0
Ответов: 36
Рейтинг: 0
#8: 2025-03-31 13:52:53 ЛС | профиль | цитата
О, есть сдвиг, но только метод doShellExec не поднимает привилегии ни при каких обстоятельствах.
А вот если использовать doRunAsUser и подать на точки логин с паролем, то запуск от админа происходит успешно!
И, к стати, что будет в поле Action, не имеет значения. Его даже можно оставить пустым.
Получается, что запуск от админа командной строки, а из неё апплета cpl, даёт нужный результат!
И это радует, спасибо!



Add(MainForm,3152432,805,210)
{
link(onCreate,11105470:doEvent1,[])
}
Add(WinExec,11113223,945,210)
{
FileName="cmd"
Action=""
UserName="testuser"
Password="testpassword"
Point(onErrorExec)
Point(onConsoleResult)
Point(onConsoleError)
Point(doRunAsUser)
}
Add(WinExec,5649892,945,266)
{
FileName="cmd"
Point(onErrorExec)
Point(onConsoleResult)
Point(onConsoleError)
Point(doRunAsUser)
}
Add(Hub,11105470,882,224)
{
link(onEvent1,11113223:doRunAsUser,[])
link(onEvent2,5649892:doRunAsUser,[(920,237)(920,286)])
}
карма: 0

0
Ответов: 4650
Рейтинг: 760
#9: 2025-03-31 19:37:14 ЛС | профиль | цитата
Если посмотреть в код компонента, то можно увидеть что doRunCpl - это тот же doExec, которым запускается файл rundll32.exe с передачей названия апплета в командной строке. Следовательно, несложно это же вызвать с помощью doRunAsUser.
карма: 26

0
Ответов: 207
Рейтинг: 2
#10: 2025-03-31 23:46:02 ЛС | профиль | цитата
Gunta писал(а):
Action="runas"

откуда ты это берешь? Впервые о такой команде слышу ты мне америку открыл! 17 лет сисьадмином работаю, понятное дело криворуким но все же)))


Чуть позже нашел описание команды.
https://ab57.ru/cmdlist/runas.html

Редактировалось 1 раз(а), последний 2025-03-31 23:55:36
карма: 0

0
Ответов: 876
Рейтинг: 187
#11: 2025-04-01 07:57:25 ЛС | профиль | цитата
zhorik5 писал(а):
откуда ты это берешь?

Всё намного банальнее. Из реестра.
Для каждого типа файлов есть свой перечень действий.
Для EXE файлов он один

Add(MainForm,2953706,70,175)
{
link(onCreate,8837513:doEnumKeys,[])
}
Add(Memo,5298743,182,182)
{
Left=75
Top=45
Width=280
Height=200
Align=5
Font=[Lucida Console,12,0,0,204]
Antialiased=1
ScrollBars=3
}
Add(Registry,8837513,126,175)
{
Key="exefile\shell\"
Point(doEnumKeys)
Point(onEnumKey)
link(onEnumKey,5298743:doAdd,[])
}

Для CPL файлов другой

Add(MainForm,2953706,70,112)
{
link(onCreate,15228003:doEnumKeys,[])
}
Add(Registry,15228003,126,112)
{
Key="cplfile\shell\"
Point(doEnumKeys)
Point(onEnumKey)
link(onEnumKey,5298743:doAdd,[])
}
Add(Memo,5298743,182,119)
{
Left=75
Top=45
Width=280
Height=200
Align=5
Font=[Lucida Console,12,0,0,204]
Antialiased=1
ScrollBars=3
}

карма: 18

0
11
Сообщение
...
Прикрепленные файлы
(файлы не залиты)