Hallo AutoIt.de Community,
Ich habe folgendes Skript:
Spoiler anzeigen
#include <ProcessConstants.au3>
#include <StructureConstants.au3>
#include <SecurityConstants.au3>
#include <Security.au3>
#include <WinAPI.au3>
ConsoleWrite(_runAsUser("C:\mein\Ordner\test\application.exe", "C:\mein\Ordner\test\" & @CRLF)
[/autoit] [autoit][/autoit] [autoit]Func _runAsUser($sCommandLine = "", $sProcessDir = "")
Local $tSTARTUPINFO = DllStructCreate($tagSTARTUPINFO)
Local $tPROCESS_INFORMATION = DllStructCreate($tagPROCESS_INFORMATION)
Local $hProcess = _WinAPI_OpenProcess($PROCESS_ALL_ACCESS, 0, ProcessExists("explorer.exe"))
[/autoit] [autoit][/autoit] [autoit]If $hProcess Then
Local $hTokOriginal = _Security__OpenProcessToken($hProcess, $TOKEN_ALL_ACCESS)
_WinAPI_CloseHandle($hProcess)
If $hTokOriginal Then
Local $hTokDuplicate = _Security__DuplicateTokenEx($hTokOriginal, $TOKEN_ALL_ACCESS, $SECURITYIMPERSONATION, $TOKENPRIMARY)
_WinAPI_CloseHandle($hTokOriginal)
[/autoit] [autoit][/autoit] [autoit]If $hTokDuplicate Then
_Security__CreateProcessWithToken($hTokDuplicate, 0, $sCommandLine, 0, $sProcessDir, $tSTARTUPINFO, $tPROCESS_INFORMATION)
_WinAPI_CloseHandle($hTokDuplicate)
_WinAPI_CloseHandle(DllStructGetData($tPROCESS_INFORMATION, "hProcess"))
_WinAPI_CloseHandle(DllStructGetData($tPROCESS_INFORMATION, "hThread"))
Return DllStructGetData($tPROCESS_INFORMATION, "ProcessID")
EndIf
EndIf
EndIf
EndFunc
Das Skript läuft super (liegt wohl daran, dass ich es der Hilfe entnommen habe ). Ich kann eine EXE kompilieren, diese dann als anderer Benutzer ausführen und das Skript wird dennoch als angemeldeter Benutzer ausgeführt. (explorer.exe läuft unter angemeldetem Benutzer.) Also genau was ich will.
Wenn ich jedoch die gleiche Funktion als Systembenutzer ausführe, (also als Service Services.au3 usw.) gibt die Funktion zwar die PID zurück, jedoch ist der Prozess nicht auffindbar.
Ich habe es auch schon direkt per DLLCall versucht:
[autoit]DllCall("advapi32.dll", "bool", "CreateProcessWithTokenW", "handle", $hTokDuplicate, "dword", 0, "ptr", 0, "wstr", $sCommandLine, "dword", 0, "ptr", "username_ohne_domain", "wstr", $sDir, "struct*", $tSTARTUPINFO, "struct*", $tPROCESS_INFORMATION)
[/autoit]Ich hoffe ihr könnt mir helfen.