Что нового

_RunAsSystem() - Запуск процесса под учётной записью SYSTEM

Zaramot

I ♥ AutoIt
Сообщения
1,160
Репутация
660
Думаю с названия все ясно ...

Полезняшка:
_RunAsSystem.au3

Пример:
Код:
_RunAsSystem('notepad.exe')


PS. Сделано от скуки ..
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
Zaramot
Ну и костыль =)
Впервые такое вижу. Может проще узнать каким образом работает PsExec?
 
Автор
Zaramot

Zaramot

I ♥ AutoIt
Сообщения
1,160
Репутация
660
;D Я же не заставляю вас качать и пользоваться, просто выложил. Мало-ли кому пригодится :blum:
Есть еще вариант - через команду at, но я сильно не вникал в него :smile:

Можно и без сохранение бинарного кода:

PsExec:
PsExec.rar

Пример:
Код:
_RunAsSystem('notepad.exe')

Func _RunAsSystem($Prog)
	if not FileExists(@ScriptDir & '\PsExec.exe') Then
		MsgBox(16, 'Error', 'File PsExec.exe not found !')
		Return
	EndIf
	Local $Shell = Run(FileGetShortName(@ScriptDir) & '\PsExec.exe -sdi ' & FileGetShortName($Prog), '', @SW_HIDE)
	Return $Shell
EndFunc
 

ArtInt

Знающий
Сообщения
135
Репутация
18
Да, я в шоке от кода :shok:

Но, главное что работает и не тормозит :smile:
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
Решил поднять эту тему используя AT.
Но есть ряд проблем, а именно в моей операционной системе.
Код:
в win7 x64 не работает интерактивно

А ко всему прочему вообще не работает(проверял на откомпилированном скрипте AutoIt). Получил он всего лишь права пользователя.

Поэтому прошу проверить на стороне.
Код:
Func _FxLibrary_Process_RunAsSystem($__Executable)
   Local $hFile, $sPath = FileGetShortName(@TempDir) & '\FxL_RaS.bat', $sBat = '0x' & _
   '406563686F206F66660D0A736574206D3D2574696D653A7E332C32250D0A73657420683D2574696D653A7E302C32250D0A696620256D3A7E302C312520'& _
   '657175203020736574206D3D256D3A7E312C31250D0A69662025683A7E302C31252065717520302073657420683D25683A7E312C31250D0A736574202F'& _
   '61206D2B3D310D0A696620256D252065717520363020736574206D3D3020262620736574202F6120682B3D310D0A696620256825206571752032342073'& _
   '657420683D300D0A406563686F206F6E0D0A406563686F2E0D0A6174202568253A256D25202F696E746572616374697665202531202532202533202534'& _
   '2025352025362025372025380D0A406174'
   
   $sBat = Binary($sBat)
   $hFile = FileOpen(@TempDir & '\FxL_RaS.bat',18)
   FileWrite($hFile, $sBat)
   FileClose($hFile)

   RunWait($sPath & ' ' & FileGetShortName($__Executable), '', @SW_HIDE)
   FileDelete(@TempDir & '\FxL_RaS.bat')
EndFunc


P.S. Скрипт откомпилируйте и запустите от имени администратора.


Добавлено:
Сообщение автоматически объединено:

Удалось запустить на win7 x64 (не интерактивно).
Поправил пример.
 

aleratorio

Осваивающий
Сообщения
85
Репутация
43
Zaramot, спасибо, пригодилось. Только, при первом запуске на новой системе, PsExec предлагает принять лицензионное соглашение, а т.к. запускаем его скрыто - не сразу сообразил почему пример не работает... Код поправил до:

Код:
#include <Security.au3>

_RunAsSystem('notepad.exe')

Func _RunAsSystem($Prog)
    if not FileExists(@ScriptDir & '\PsExec.exe') Then
        MsgBox(16, 'Error', 'File PsExec.exe not found !')
        Return
    EndIf

	;Добавляем запись в реестр о том, что лицензионное соглашение принято:
	Local $UserSid = _Security__SidToStringSid(_Security__GetAccountSid(@UserName))
	RegWrite('HKEY_USERS\' & $UserSid & '\Software\Sysinternals\PsExec', 'EulaAccepted', "REG_DWORD", 1)

	Local $Shell = Run(@ScriptDir & '\PsExec.exe -sdi "' & $Prog & '"', '', @SW_HIDE)
    Return $Shell
EndFunc
 
Верх