[gelöst] Probleme beim arbeiten mit versch. Benutzerumgebungen

  • 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
    [autoit]


    Dim $anzprinter
    Dim $u_anzprinter
    Dim $printer[11][2]
    Dim $u_printer[11][2] ;Printer des momentan angemeldeten USers
    Dim $defprinter
    Dim $u_defprinter

    [/autoit] [autoit][/autoit] [autoit]

    ;# 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

    [/autoit] [autoit][/autoit] [autoit]

    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()

    [/autoit] [autoit][/autoit] [autoit]

    ;# 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

    [/autoit] [autoit][/autoit] [autoit]

    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

    [/autoit]

    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

    2 Mal editiert, zuletzt von Gawe (2. Mai 2007 um 17:22)

  • Zitat

    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????


    Wenn ich die englische Hilfe richtig verstanden habe, gibt dir RunAsSet() nur die Berechtigungen des entsprechenden Users, somit verändert sich die Umgebung nicht zwangsläufig, dass kommt auf die Unterschiede der User an.

    Außer deiner Idee über temporäre Speicherung fällt mir spontan auch nichts ein, wie Du das Problem lösen könntest.

  • Hi,
    ich verstehe dein problem nicht.
    Wenn du nur ein Programm mit einem anderen User aufrufst, zählen die Berechtigungen nur für das Programm. Du kannst doch dann die Drucker nehmen die auf dem PC installiert sind.
    Die Drucker sind doch (soweit ich glaube) nicht Profilgebunden.

    MfG
    Der_Doc

  • Du hast recht.

    Wenn das so wäre wie du sagst, dann hätte ich das Problem nicht. ;)
    Leider sind die Drucker doch Profilgebunden.

    MfG
    Gawe

  • Habe mir jetzt eine Starterdatei gebastelt. Welche mein eigentliches Skript im Userkontext aufruft. Das Skript liest die verwendetet Drucker aus speichert sie in einer temporären Datei und gibt zurück an mein Starterskript.
    Das wiederum ändert jetzt den Kontext liest aus der temp-Datei die Drucker und setzt diese für den User.
    Hat den Vorteil, dass egal welcher User das Programm startet, er hat immer seine Druckumgebung mit dabei.

    P.S: Das setzten der Drucker über RegKeys ist nicht zu empfehlen.
    Besser ist es, die Drucker mit dem Aufruf
    "rundll32 printui.dll,PrintUIEntry ... " zu installieren. Dann funktioniert es tadellos.

    MfG
    Gawe