Hallo !
Ich habe ein Skript geschrieben welches u.a ein bestimmtes Programm mmit den Rechten eines anderen Nutzers ausführt.
Mein Problem ist jetzt:
Will der reell mit dem Skript (und dem Programm) arbeitende User etwas aus dem Programm ausdrucken, so findet er seine Druckumgebung natürlich nicht vor. (Denn das Programm läuft ja unter einem anderen User Kontext.)
Mein Ansatz war jetzt folgender:
- Starte das Programm als der normale User.
- Stelle durch auslesen der Registry im Current_User Zweig die Druckumgebung fest
- Werde dann der andere User* (der zum auführen des Programmes benötigt wird -> Adminrechte)
*Ich glaube das funzt nicht wirklich, da das Skript dann schon mit Adminrechten laufen müsste, dass wiederum würde es mir aber nicht ermöglichen die Druckumgebung des Users auszulesen.
- Übernehme die Druckumgebung durch setzten der Regkeys
Ich war eigentlich der Meinung durch RunAsSet() wird die Umgebung des Users mit geladen.
Wenn ich aber die Druckumgebug auslese, dann den User wechsele und die Umgebung nochmal auslese, dann zeigt er mir immer noch die Umgebung des ersten (reel) angemeldeten Users an.
Lange Rede kurzer Sinn, hier mein momentanes Skript:
Spoiler anzeigen
Dim $anzprinter
Dim $u_anzprinter
Dim $printer[11][2]
Dim $u_printer[11][2] ;Printer des momentan angemeldeten USers
Dim $defprinter
Dim $u_defprinter
;# Programm #
GetPrinter()
$u_anzprinter=$anzprinter
For $j=1 to $u_anzprinter ;Übergabe der ausgelesenen Drucker
$u_printer[$j][0]=$printer[$j][0]
$u_printer[$j][1]=$printer[$j][1]
Next
$u_defprinter=$defprinter
RunAsSet("Benutzer","domain","Passwort")
GetPrinter() ; Ermittele momentane Printer von User TIS2000
For $j=1 to $anzprinter
MsgBox(0,"TIS-User",$printer[$j][0])
RegDelete("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Devices\" & $printer[$j][0],"") ;Lösche vorhandene Einträge
Next
SetPrinter()
RunAsSet()
;# FUNKTIONEN ##
[/autoit] [autoit][/autoit] [autoit]Func GetPrinter()
Dim $i
For $i=1 to 10
$printer[$i][0]= RegEnumVal ( "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Devices", $i )
if @ERROR <> 0 THEN ExitLoop
$printer[$i][1]=RegRead ("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Devices", $printer[$i][0] )
;MsgBox(0,"","Drucker" & $printer[$i][0] & " " & "Wert:" & $printer[$i][1])
Next
$anzprinter=$i
$defprinter= RegRead ("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows","Device") ;Standarddrucker ermitteln
MsgBox(0,"",$defprinter)
EndFunc
Func SetPrinter()
Dim $i
For $i=1 to 10
RegWrite("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Devices", $u_printer[$i][0], "REG_SZ", $u_printer[$i][1])
Next
RegWrite("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows","Device","REG_SZ", $defprinter)
EndFunc
Hat jemand evtl. einen anderen Lösungansatz / eine Vorschlag.
Startet RunASSet im Default den auch wirklich die Umgebung des Users ?
Laut Hilfe sollte es ja so sein.
Aber warum zeigt er mir nicht die Richtige Umgebung ????
Ein Lösungsansatz wäre noch, dass Skript als normaler User zu starten, die Regkeys temporär zu sichern. Das Skript wieder zu beenden um es dann mit admin-Rechten zu starten. Aber schön ist das ja nicht.
MfG
Gawe