AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Problem beim auslesen des Aktuellen Benutzers
Thema durchsuchen
Ansicht
Themen-Optionen

Problem beim auslesen des Aktuellen Benutzers

Ein Thema von pikman · begonnen am 16. Okt 2004 · letzter Beitrag vom 4. Nov 2004
Antwort Antwort
Seite 1 von 2  1 2      
pikman

Registriert seit: 22. Sep 2004
8 Beiträge
 
Delphi 7 Enterprise
 
#1

Problem beim auslesen des Aktuellen Benutzers

  Alt 16. Okt 2004, 18:28
Hallo,

hier ist mein Code zum Auslesen des Benutzers:
Delphi-Quellcode:
var
  Wert: PChar;
  Laenge: integer;
begin
  Laenge := GetEnvironmentVariable('USERNAME',nil,0);
  GetMem(Wert, Laenge);
  GetEnvironmentVariable('USERNAME',Wert,Laenge);
 RESULT := String(Wert);
 ShowMessage(Wert);
  FreeMem(Wert);
Das funktioniert auch super. Nun wird mein Programm aber beim Drucken einer Datei aufgerufen. Also der Druckertreiber startet das Programm.
Wenn nun aber der Druckertreiber das Programm startet bekomme ich bei der oben genanten Funktion SYSTEM als aktuellen Benutzer augegeben.
Ich will aber den Angemeldeten Benutzer bekommen.

Ich hoffe mein Problem ist verständlich rübergekommen, wenn ihr was nicht verstanden habt fragt nach.

Ich danke schon mal im vorraus für Euere Antworten.
MFG
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#2

Re: Problem beim auslesen des Aktuellen Benutzers

  Alt 16. Okt 2004, 18:59
Hi!

Herzlich willkommen in der DP!

Ich vermute mal, dass dein Code immer den Benutzer zurückgibt, von dem aus das Programm gestartet wurde. Das ist in dem Fall wohl SYSTEM.

Dazu mal noch folgende Links zum Weiterlesen:
http://www.delphipraxis.net/internal...ht=angemeld%2A
http://www.delphipraxis.net/internal...ht=angemeld%2A
http://www.delphipraxis.net/internal...ht=angemeld%2A

Ciao Frederic
Frederic Kerber
  Mit Zitat antworten Zitat
Drysek

Registriert seit: 28. Dez 2003
10 Beiträge
 
#3

Re: Problem beim auslesen des Aktuellen Benutzers

  Alt 17. Okt 2004, 01:32
Hi, ich arbeite mit dem Autor des Threads zusammen und versuche die Problematik nochmal ein wenig genauer zu spezifizieren !

Es geht im Grunde nicht darum den aktuell angemeldeten Nutzer auszulesen. Das wäre ja auch nicht die Schwierigkeit !

Das Problem was wir haben, ist das wenn unser Programm durch übergabe eines Druckauftrages an einen bestimmten Drucker angestoßen wird, der ausführende Benutzer das System ist !
So weit so gut. Wenn jetzt unser Programm den Druckauftrag abfängt und ihn z.B. auf dem Desktop oder in den Eigenen Datein von Windows via TSafeDialog temporär ablegen soll. Tritt das Problem auf. Der Pfad z.B. unter WindowsXP zum Desktop lautet dann nämlich nicht mehr c:\dokumente einstellungen\NutzerName\Desktop sondern c:\dokumente einstellungen\LocalService\Desktop! Und genau da liegt das Problem. Is ja auch klar, weil dem Nutzer SYSTEM LocalService als Zielpfad zugeordnet ist !

Gibt es vielleicht eine Möglichkeit den Druckauftrag als normalen Nutzer also nicht als Nutzer SYSTEM anzustoßen, damit wir das Problem umgehen können ? Irgendwelche speziefischen API Calls für XP oder Win2k wie z.B. "LsaEnumerateLogonSessions" bringen uns auch nicht weiter, da das Ganze ja auch z.B. unter 98 laufen soll *g*

Vielleicht fällt euch ja noch was ein, wäre super !

Greets

Drysek
  Mit Zitat antworten Zitat
Svobi1975

Registriert seit: 21. Okt 2004
3 Beiträge
 
Delphi 6 Enterprise
 
#4

Re: Problem beim auslesen des Aktuellen Benutzers

  Alt 21. Okt 2004, 17:31
Der Druck wird immer unter dem SYSTEM Account von Windows ausgeführt.

Deshalb bekommt Ihr diese Meldung.

Es gibt eine Andere Möglichkein um den Benutzernamen für den das Dokument gedruckt wird herrauszufinden.

Das .ps File

Dort gibt es einen Eintrag
%%For : Benutzer
Diesen einfach rausparsen und fertig.

Welchen Druckerumleiter benutzt Ihr?
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#5

Re: Problem beim auslesen des Aktuellen Benutzers

  Alt 21. Okt 2004, 17:32
Hi!

Wo liegt denn dieses ps-File?


Ciao Frederic
Frederic Kerber
  Mit Zitat antworten Zitat
Svobi1975

Registriert seit: 21. Okt 2004
3 Beiträge
 
Delphi 6 Enterprise
 
#6

Re: Problem beim auslesen des Aktuellen Benutzers

  Alt 21. Okt 2004, 17:38
Das kommt drauf an, welchen Redirector Ihr benutzt.

Wenn man RedMon benuzt, kann man sich den Dateinamen als Parameter übergeben lassen

Das ist meine Ausführkonfiguration :

C:\Programme\rePDF\rePDF.exe "%d" "%u" "%1"

%d = Dokumentenname
%u = User (in unserem Fall SYSTEM)
%l = temporäre Datei (meistens im Windows / System32 )

Das steht aber auch in der Redmondoku.

Anmerkung : Die Datei ist nur solange da, solange der Redmon läuft, danach wird Sie gelöscht.
Also kopieren.... dann kann man sich die Datei auch mal anschauen, und man sollte einen PS - Drucker als Treiber aussuchen, da man PS am besten auslesen kann und auch gleich mit Ghostscript weiterverarbeiten kann (zb.: PDF)
  Mit Zitat antworten Zitat
Drysek

Registriert seit: 28. Dez 2003
10 Beiträge
 
#7

Re: Problem beim auslesen des Aktuellen Benutzers

  Alt 23. Okt 2004, 01:56
Hi Svobi1975,

diese Möglichkeit des Auslesens des Nutzers ist mir auch bekannt!
Das Problem hängt aber wohl eher an der Delphikomponente TSaveDialog.
Also wir greifen den output des Druckers ab, in unserem Fall die ps Datei
und bieten die Möglichkeit des Speicherns der ps Datei über die bereits
genante TSaveDialog Komponente von Delphi an. Diese öffnet sich nach dem der
Druckprozess gestartet wurde automatisch um das ps File zu speichern!
Leider greift die Komponente immer auf den Nutzer System zurück so das sich
der Pfad zum Desktop den man ja als Speicherort über die Komponente auch aus-
wählen kann immer auf den Pfad LocalService\Desktop bezieht und nicht auf das
Desktopverzeichnis des angemeldeten Users
Gibts da vielleicht ne Möglichkeit der Komponente zu sagen, dass Sie für Ihre
Speicherpfade nen anderen Nutzer zu Grunde legen soll oder gibts vielleicht
Alternativen zur Komponente TSaveDialog.

Gruß

Drysek
  Mit Zitat antworten Zitat
Svobi1975

Registriert seit: 21. Okt 2004
3 Beiträge
 
Delphi 6 Enterprise
 
#8

Re: Problem beim auslesen des Aktuellen Benutzers

  Alt 24. Okt 2004, 13:22
Hallo Drysek,

habe in den letzten Tagenauch meinen PDF - Drucker verbessert (bessergesagt versuche ich Ihn 100% Terminalserver fähig zu machen).
Das scheitert leider daran dass die Pfade (Parameter %1) nicht mehr übergeben werden.
Naja mein Problem.


Aber das mit dem Savedialog kenne ich aus einem Ähnlichen Fall. Ich habe mich jetzt damit arrangiert, dass ich die EnvironnementVariable 'Profile') hole und diese dann mit den entsprechenden Daten ersetzte.

Das ist zwar mit der Fasut durchs auge aber so löse ich das Problem mit dem Userverzeichniss.

Nochmal zu meinem Problem. Ich versuche einen Generellen Service auf dem Rechner (in meinem Fall Terminalserver einzurichten , der eine Verteilung der Daten (pro Benutzer) möglich macht.
Diese Verteilten Daten soll dann ein Prozess des Benutzers überprüfen und drucken.
Ich werde mi dem ServerService direkt das Windows temp verzeichniss überwachen.
Die Verteilung werde ich in die Benutzerverzeichnisse Machen.

Ich denke das ist eine gute Idee.

Meinung ?
  Mit Zitat antworten Zitat
pikman

Registriert seit: 22. Sep 2004
8 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: Problem beim auslesen des Aktuellen Benutzers

  Alt 26. Okt 2004, 19:14
Hallo Svobi1975

ich arbeite mit Drysek zusammen.

Zitat:
Aber das mit dem Savedialog kenne ich aus einem Ähnlichen Fall. Ich habe mich jetzt damit arrangiert, dass ich die EnvironnementVariable 'Profile') hole und diese dann mit den entsprechenden Daten ersetzte.
Kannst du das mal genauer Erläutern wie du das gemacht hast??
Ich kenne keine Umgebungsvariable Namens "Profile".
  Mit Zitat antworten Zitat
pikman

Registriert seit: 22. Sep 2004
8 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: Problem beim auslesen des Aktuellen Benutzers

  Alt 27. Okt 2004, 16:04
Alles klar,

hab es geschaft. Poste mal den Code false jemand auch so nen Prob hat.

Danke Svobi1975, der Tipp war gold richtig.
Danke natürlich auch an alle anderen.

Delphi-Quellcode:
function TForm1.SetTheRightUserProfile : boolean;
var
   bufferProfilePath: Array[0..1024] of Char;
   strTmp : String;
begin
   if Windows.GetEnvironmentVariable('ALLUSERSPROFILE', bufferProfilePath, sizeof(bufferProfilePath)) <> 0 then begin
      strTmp := bufferProfilePath;
      strTmp := AnsiReplaceStr(strTmp, 'All Users', GetUserName());

      if Windows.SetEnvironmentVariable('USERPROFILE', PCHAR(strTmp)) then begin
         RESULT := TRUE;
      end else begin
         RESULT := FALSE;
      end;
   end else begin
      RESULT := FALSE;
   end;
end;
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:22 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz