Autor Beitrag
Icydragon
Hält's aus hier
Beiträge: 6

WIN 2000, XP
D6 Enterprise
BeitragVerfasst: Do 18.11.04 07:09 
Ich möchte aus einem Programm heraus den aktuellen Benutzer abmelden, und anschließend den Administrator anmelden.
Mit dem Befehl LogonUser geht das anscheinend nicht so, wie ich mir das vorstelle. Ich schaffe es zwar, LogonUser erfolgreich auszuführen, aber ich möchte nicht nur einen Handle mit dem Benutzer, sondern eine Wirkliche Anmeldung ausführen.
Für Ideen, oder Tipps wäre ich furchtbar Dankbar.

Grüße Icydragon
Elite
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 18.11.04 07:34 
Weiterführende Frage:
Kann man eine Anwendung überhaupt laufen lassen, obwohl keiner angemeldet ist? Ich glaube nämlich kaum.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 18.11.04 07:39 
Suche im MSDN EXITWINDOWSEX kennt den Flag EWX_LOGOFF. Aber sag mir mal, wie deine Anwendung wieder einen Benutzer anmelden soll, wenn sie durch den Abmeldevorgang beendet wurde?

Und was willst du damit eigentlich bezwecken? Wenn du eine Anwendung unter einem anderen Benutzerkonto starten willst, dann kuck dir das mal an: www.delphipraxis.net/post268996.html .
minnime
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 171

Win 7
Delphi Prism 2011, C# (VS 2010)
BeitragVerfasst: Do 18.11.04 08:04 
Naja mit einer Anwendung wirds schwierig, aber mit einem Sevice würde es gehen. Bei unserem Server auf der Arbeit wird das genauso gemacht, da ist auch nie einer angemeldet.
Icydragon Threadstarter
Hält's aus hier
Beiträge: 6

WIN 2000, XP
D6 Enterprise
BeitragVerfasst: Do 18.11.04 12:45 
Es gibt bei Windows ja auch die möglichkeit via AutoAdminLogon einen benutzer automatisch beim Start anzumelden. Folglich sollte es auch eine Möglichkeit geben, ähnliche Parameter entweder zu speichern und von der Loginaufforderung abrufen zu lassen, oder aber mit Hilfe eines Dienstes die Anmeldeinformationen zu übergeben.

Ich möchte nicht nur ein Programm unter einem anderen Benutzernamen (sprich: mit anderen Rechten) starten, sondern eine Updateinstallation ausführen. Es ist aber meistens an den Rechnern, an denen mein Update-Proggi laufen soll kein Administrator(oder Benutzer mit Admin-rechten) angemeldet, sondern nur ein Hauptbenutzer. Sollte jetzt die Updateinstalltion starten, bekommt man ja (auch wenn man das Update-Paket als z.B. Admin ausführt) nicht die schreibrechte auf die Systemordner und bestimmte Registrierungseinträge (diese bleiben nach wie vor an beim angemeldeten Benutzer...!Glaube ich zu wissen!).

Einzige Alternative wäre dann wohl dem aktuell angemeldeten Benutzer die benötigten Rechte zu geben, und dann die Update-Installation zu starten. Allerdings finde ich die Lösung ein wenig Umständlich und wenn dann was schief geht, behält ein Benutzer evtl die Rechte und kann ne menge Mist verursachen.
Motzi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2931

XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
BeitragVerfasst: Do 18.11.04 12:51 
Also wenn die Update-Installation als Admin gestartet wird, dann hat das Installations-Programm auch alle Rechte die ein angemeldeter Admin hat, ganz unabhängig davon was für Benutzer sonst noch angemeldet sind..!

_________________
gringo pussy cats - eef i see you i will pull your tail out by eets roots!
Icydragon Threadstarter
Hält's aus hier
Beiträge: 6

WIN 2000, XP
D6 Enterprise
BeitragVerfasst: Do 18.11.04 17:37 
@Motzi
Habe grade noch ein bisschen mit der Funktion CreateProcessAsUser rumgespielt und dabei ist mir was ins Auge gesprungen:

SDK hat folgendes geschrieben:
CreateProcessAsUser allows you to access the specified directory and executable image in the security context of the caller or the target user. By default, CreateProcessAsUser accesses the directory and executable image in the security context of the caller. In this case, if the caller does not have access to the directory and executable image, the function fails. To access the directory and executable image using the security context of the target user, specify hToken in a call to the ImpersonateLoggedOnUser function before calling CreateProcessAsUser.


Wenn ich das richtig verstanden habe, dann bekommt der aufgerufene Prozess nur die Verzeichnisrechte des Benutzers, der die Funktion aufgerufen hat, Man muss also zusätzlich den Token der LogonUser-Funktion mit ImpersonateLoggedOnUser 'Personifizieren'. Erst dann kann man die vollen rechte des Ziel-Users(in meinem Fall Admin-Rechte) benutzen.
Es stimmt also nicht, das man automatisch die Adminrechte benutzen kann, obwohl der aktiv angemeldete Benutzer kein Admin ist.

Mein Englisch ist nicht das beste. Falls ich da was falsch gelesen/verstanden habe, klärt mich bitte auf.

Aber das hilft mir noch nicht bei meinem ursprünglichen Problem weiter.
Habe auch noch mit ein Paar Entwicklern bei mir in der Arbeit gesprochen, aber die sagen alle das gleiche. "Es ist sicher möglich, aber sie wissen nicht wie"

Ist irgendwie zum verzweifeln

Moderiert von user profile iconMotzi: Quote-Tags hinzugefügt.
Motzi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2931

XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
BeitragVerfasst: Do 18.11.04 19:38 
Nein.. das hast du falsch verstanden! ;)

Der Prozess hat ganz normal die Rechte des Accounts unter dem er erzeugt wurde (alles andere wäre auch unlogisch)! Startest du den Prozess also per CreateProcessAsUser als Admin, dann läuft dieser ganz normal unter dem Admin-Konto, so wie wenn du als Admin angemeldet wärst und den Prozess startest (bis auf ein paar kleine Details, aber das ginge jetzt zu weit).

Der Absatz den du gepostet hast bezieht sich auf was anderes... hier geht es darum, dass möglicherweise die zu startende Exe-Datei in einem Verzeichnis liegt auf das der angemeldete Benutzer keinen Zugriff hat. Sollte das der Fall sein wird per ImpersonateLoggedOnUser als andrer User (nämlich der unter dem der neue Prozess gestartet werden soll) auf das Verzeichnis und die darin liegende Exe zugegriffen...


Edit: Erklär nochmal genau was du vorhast bzw. wo du die Probleme bei deinem Vorhaben siehst! Das Security-System von Windows ist recht komplex (viel komplexer als es von Außen vielleicht den Anschein hat), aber ich glaube, dass du im moment komplett in die falsche Richtung denkst...

Gruß, Motzi

_________________
gringo pussy cats - eef i see you i will pull your tail out by eets roots!
Icydragon Threadstarter
Hält's aus hier
Beiträge: 6

WIN 2000, XP
D6 Enterprise
BeitragVerfasst: Mo 22.11.04 06:57 
Mein Programm soll Updates für Windows und andere Software auf jedem beliebigen PC in der Firma installieren, ohne das ich an die PC’s muss, um dass vor Ort zu machen.
Aufgerufen wird das Programm über ein Login-Script beim gewünschten Benutzer. d.h., dass kein Administrator sondern nur ein Hauptbenutzer angemeldet ist. Um einige Updates für Software zu installieren, braucht man gewisse schreibrechte auf Systemordnern und in bestimmten Sparten der Registrierung.
Wenn ich jetzt mit LogonUser Arbeite, bleibt der Hauptbenutzer angemeldet und die Updates starten unter diesem account. Allerdings ist es aus Profiltechnischen Gründen besser, wenn der Update-Vorgang unter einem Administrator-Account gestartet wird.
Also möchte ich, dass das Programm beim ersten Start (wenn noch der Hauptbenutzer angemeldet ist) ein Meldung ausgibt, das der Benutzer die Finger weg lässt. Anschließend soll der Benutzer abgemeldet werden und dann ein automatischer Login als Administrator gestartet werden. Dann wird das Programm erneut aufgerufen und der Update-Vorgang startet wie gewünscht. Am Schluss ein Neustart, und der Benutzer kann sich wieder normal anmelden.
Motzi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2931

XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
BeitragVerfasst: Mo 22.11.04 10:44 
Und wo ist das Problem wenn du mit LogonUser und CreateProcessAsUser die Updates unter dem Administrator-Account startest und dein Prog einfach wartet bis der Prozess fertig ist und solange einfach den Computer "blockiert", also dem Benutzer einfach anzeigt, dass es arbeitet und er halt warten soll...?

_________________
gringo pussy cats - eef i see you i will pull your tail out by eets roots!