Einzelnen Beitrag anzeigen

CodeX

Registriert seit: 30. Okt 2004
471 Beiträge
 
Delphi 12 Athens
 
#18

Re: Programm von Dienst starten lassen (Jetzt aber wirklich

  Alt 22. Mai 2008, 22:44
Du hast wohl alles schon mal gemacht, oder?

Habe ein wenig mit Deiner Funktion herumexperimentiert.

Hier meine Ergebnisse:

Wenn ich die Funktion genau so übernehme, dann wird die Umgebung von "Default User" genommen.
Zum Testen schaue ich immer über SHGetSpecialFolderLocation nach, welcher Bentzerordner aus dem Programm heraus angezeigt wird.

Nehme ich bei CreateEnvironmentBlock als zweiten Parameter 0, erhalte ich
C:\Dokumente und Einstellungen\Default User\Anwendungsdaten

Mit der nachfolgenden Änderung kommt das gewünschte
C:\Dokumente und Einstellungen\MyUser\Anwendungsdaten

Ich denke CreateEnvironmentBlock(@pEnv, 0, true); sollte deshalb geändert werden.

Das hier funktioniert als Ersatz:
Delphi-Quellcode:
//UserToken := TJwSecurityToken.CreateWTSQueryUserTokenEx(nil, WtsGetActiveConsoleSessionID); //nur ab XP :(
UserToken := TJwSecurityToken.CreateCompatibilityQueryUserToken(MAXIMUM_ALLOWED, 'explorer.exe'); //auch für 2000! :)
JwaWindows.CreateEnvironmentBlock(@pEnv, UserToken.TokenHandle, true);
Damit läuft das Programm als SYSTEM Anwendung aber mit der Umgebung des aktuellen Benutzers.


Bleibt noch eine Frage: Für Vista lässt sich da nichts mehr anpassen, oder? Da wird das Programm nämlich auf dem speziellen Desktop gestartet und entsprechend nicht normal angezeigt. Ja, ich weiß, das ist eine gewollte sicherheitsbedingte Änderung gewesen, aber vielleicht lässt sich da ja trotzdem noch was machen?
  Mit Zitat antworten Zitat