Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Die Delphi-IDE (https://www.delphipraxis.net/62-die-delphi-ide/)
-   -   Debuggen als Administrator (https://www.delphipraxis.net/80321-debuggen-als-administrator.html)

Codewalker 7. Nov 2006 08:47


Debuggen als Administrator
 
Hallo zusammen.

Ich programmiere mit Delphi als eingeschränkter Benutzer (Firmennetzwerk). Meine aktuelle Anwendung benötigt aber zwingend Admin-Rechte. Ich kann zwar mit "Ausführen als..." die Exe erfolgreich starten, habe dann aber keinen Debugger mehr. Gibt es keine Methode Delphi zu sagen, es solle das Programm unter anderen Anmeldeinformationen starten und debuggen?

hoika 7. Nov 2006 09:08

Re: Debuggen als Administrator
 
Hallo,

dein Programm sollte sich die Rechte nach Start holen,
und zwar auch nur dann, wenn sie benötigt werden.
Spätestens ab Visa ist das eh Standard.
Also Bsp-weise für Setzen der Zeit.

Delphi-Quellcode:
if not SetPrivilege('SE_SYSTEMTIME_NAME', True) then
begin
  // logging
end;

try
  if SetLocalTime(tdtTime)=False then
  begin
    // logging ?
  end;
finally
  SetPrivilege('SE_SYSTEMTIME_NAME', False);
end;
Delphi-Quellcode:
{ Privileg setzen
  für Zeit muß SE_SYSTEMTIME_NAME übergeben werden }
function SetPrivilege(const sPrivilegeName: String;
  bEnabled : boolean): boolean;
var
 TPPrev,TP : TTokenPrivileges;
 Token : THandle;
 dwRetLen : DWord;
begin
 Result := False;

 try
  {$IFDEF VER90}
    { in Delphi2 ist OpenProcessToken mit PHandle deklariert }
   OpenProcessToken(GetCurrentProcess,TOKEN_ADJUST_PRIVILEGES or
                                      TOKEN_QUERY,@Token);
  {$ELSE}
    { in > Delphi2 ist OpenProcessToken mit var THandle deklariert }
   OpenProcessToken(GetCurrentProcess,TOKEN_ADJUST_PRIVILEGES or
                                      TOKEN_QUERY,Token);
  {$ENDIF}
   TP.PrivilegeCount := 1;
   if( LookupPrivilegeValue(Nil, PChar( sPrivilegeName ),
                                 TP.Privileges[ 0 ].LUID )) then
    begin
    if (bEnabled) then
     begin
     TP.Privileges[ 0 ].Attributes := SE_PRIVILEGE_ENABLED;
     end
    else
     begin
     TP.Privileges[ 0 ].Attributes :=0;
     end;
    dwRetLen := 0;
    Result := AdjustTokenPrivileges(Token,False,TP,SizeOf( TPPrev ),
                                   TPPrev,dwRetLen );
    end;
    CloseHandle( Token );
  except
  end;
end;

Heiko

Luckie 7. Nov 2006 09:10

Re: Debuggen als Administrator
 
@Heiko: Und was hat das mit dem Debuggen zu tun?

Hilft es eventuell, wenn du die IDE schon als Administrator startest?

hoika 7. Nov 2006 09:30

Re: Debuggen als Administrator
 
< Meine aktuelle Anwendung benötigt aber zwingend Admin-Rechte. >

Der Debugger läuft auch unter einem Standarduser (stand zumindestens im Entwickler).
Ich entwickele z.B. nicht als Admin (hier unter w2k).

Übrigens gibt es einen Artikel in der c't 23 (S. 214),
er enthält aber kein Rechteholen-Code,
dafür aber Literatur-Anhänge.


Heiko

Codewalker 7. Nov 2006 09:42

Re: Debuggen als Administrator
 
Zitat:

Zitat von hoika
Der Debugger läuft auch unter einem Standarduser (stand zumindestens im Entwickler).
Ich entwickele z.B. nicht als Admin (hier unter w2k)Heiko

Das das geht ist mir schon klar. Delphi läuft auch so... nur mein eigenes Programm das ich gerade schreibe nicht. Diese müsste also mit RunAs gestartet werden. Das kann Delphi aber von Haus aus nicht.

@Luckie: Ich habs getestet. Die Projekte laufen als Unterprozesse der Delphi-IDE und "erben" natürlich auch den Benutzerkontext. Funktioniert also. (hätte man auch selbst drauf kommen können... manchmal können die Dinge so einfach sein :mrgreen: ).

Nur ist Delphi unflexibel, weil ich alle Bibliothekspfade neu einrichten muss und die Registrierung von Turbo Delphi (hab auf der Arbeit kein BDS) auch noch Benutzerabhängig ist. Das kostet einfach nur Zeit und Nerven :wall:


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:06 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