Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Prüfen ob Programm mit "runas" gestartet worden ist. (https://www.delphipraxis.net/206114-pruefen-ob-programm-mit-runas-gestartet-worden-ist.html)

freimatz 20. Nov 2020 07:56


Prüfen ob Programm mit "runas" gestartet worden ist.
 
Hallo,

hier habe ich gefragt wie man ein Programm als Administrator startet. Die Lösung war dann der Start mit dem Verb "runas".

Nun möchte ich in einem Programm umgekehrt feststellen ob es so gestartet wurde. Dazu habe ich schon einiges gegoogelt und auch einges gefunden (1, 2, 3, 4, 5).
Gerade im letzteren hat himitsu darauf hingewiesen, dass man in der Regel eher wissen will ob man Rechte hat die man haben will.
In meinem Fall habe ich den Eindruck, dass es nicht das ist was ich will. Ich möchte "nur" feststellen ob das Programm mit "runas" gestartet wurde. Das soll nur für ein Logging sein um festzustellen ob der von mir geplante Ablauf so klappt. (Was er nach einem ersten Test bei mir tut, jedoch bei einem Tester nicht.)

Ich könnte nun schon einige Lösungen ausprobieren und schauen ob die das tun was ich will. Allerdings bin ich mir dann nicht sicher ob das auch zuverlässig ist. Vielleicht hat hier schon eine definitive Meinung dazu.

venice2 20. Nov 2020 08:09

AW: Prüfen ob Programm mit "runas" gestartet worden ist.
 
Zitat:

Die Lösung war dann der Start mit dem Verb "runas".
Gar nicht. Wie denn auch? runas ist ein Parameter wie willst du also feststellen ob dieser in einem anderen Programm Verwendung findet?
Du meinst sicherlich ob ein Programm mit Adminrechten gestartet wurde.

freimatz 20. Nov 2020 08:17

AW: Prüfen ob Programm mit "runas" gestartet worden ist.
 
Ich habe Programm A, das ist von mir geschrieben.
Das soll Programm B, auch von mir geschrieben, mit "runas" aufrufen.
In beide Programm möchte ich ein Logging einbauen, wo ich später nachschauen kann ob das auch so war.

Ich gehe schon davon aus, dass eine Prüfung explizit auf "runas" nicht möglich ist. Aber auf das was bei "runas" passiert schon. Wenn das mit einer Prüfung "ob ein Programm mit Adminrechten gestartet wurde" geht soll das mir recht sein.

venice2 20. Nov 2020 08:21

AW: Prüfen ob Programm mit "runas" gestartet worden ist.
 
Du könntest eine SendMessage an das zweite Programm schicken.
Dieses liefert dir dann den status zurück ob es mit "runas" gestartet wurde oder nicht.

Das geht dann aber nur zwischen diesen beiden Programmen.

Delphi-Quellcode:
const
  WM_MYRUNASCHECK = WM_User + 10;

SendMessage(Programm2.Handle, WM_MYRUNASCHECK, WPARAM(True), 0);
In WM_MYRUNASCHECK (wParam) kannst du dann prüfen ob WPARAM(True) oder WPARAM(False) geschickt wurde.

WM_MYRUNASCHECK muss dann aber in beiden Programmen definiert sein.
Das eine schickt den Status das andere wertet ihn über wParam aus.

freimatz 20. Nov 2020 09:14

AW: Prüfen ob Programm mit "runas" gestartet worden ist.
 
Ich habe wohl Schwierigkeiten mich verständlich auszudrücken. :(
Zitat:

Zitat von venice2 (Beitrag 1477596)
... den status zurück ob es mit "runas" gestartet wurde oder nicht.

Das ist mein Problem. Die Programme können jeweils selbst in ein Log schreiben.

Ich hätte gerne
Delphi-Quellcode:
function IsStartedWithRunas():Boolean;
begin
  ...
end;
und diese soll False liefern wenn das Programm normal gestartet wurde und True wenn mit "runas".

jaenicke 20. Nov 2020 09:22

AW: Prüfen ob Programm mit "runas" gestartet worden ist.
 
Zitat:

Zitat von freimatz (Beitrag 1477605)
Ich habe wohl Schwierigkeiten mich verständlich auszudrücken. :(

Nein, du glaubst nur den Antworten nicht.

Es ist aber so: Diese Information gibt es nicht. Es gibt nur die Information, ob das Programm bestimmte Rechte und Parameter besitzt. Wie die Funktion zum Starten aufgerufen wurde, wird nirgends gespeichert.

Du kannst natürlich einen speziellen Parameter übergeben und auf den prüfen (ParamStr). Aber das heißt noch lange nicht, dass die Rechte, die du brauchst, vorhanden sind. Auch runas ist dafür keine Garantie!

Klaus01 20. Nov 2020 09:26

AW: Prüfen ob Programm mit "runas" gestartet worden ist.
 
Prgramm A legt wenn es Programm B mit runas startet im temp Verzeichnis eine Datei an.
Porgamm B schaut nach ob die Datei vorhanden ist - ist sie da
a) wird die Datei gelöscht und
b) weiß Programm B das es mit runas gestartet wurde.

Grüße
Klaus

venice2 20. Nov 2020 09:31

AW: Prüfen ob Programm mit "runas" gestartet worden ist.
 
Zitat:

Zitat von freimatz (Beitrag 1477605)
Ich habe wohl Schwierigkeiten mich verständlich auszudrücken. :(
Zitat:

Zitat von venice2 (Beitrag 1477596)
... den status zurück ob es mit "runas" gestartet wurde oder nicht.

Das ist mein Problem. Die Programme können jeweils selbst in ein Log schreiben.

Ich hätte gerne
Delphi-Quellcode:
...
function IsStartedWithRunas():Boolean;
begin
  ...
end;
und diese soll False liefern wenn das Programm normal gestartet wurde und True wenn mit "runas".

Nochmal!
Das geht nur wenn du den Status aus Anwendung A selbst nach Anwendung B schickst auf welche art auch immer.
Beispiel habe ich genannt.

Verwende die WinProc und oder einen MessageHandler um die Message in Anwendung B zu empfangen.
Und schicke sie aus Anwendung A abhängig davon ob runAs verwendet wird oder nicht.

Delphi-Quellcode:
type
 TForm1 = class(TForm)
  private
    ...
  protected
    procedure ProcMessage(var Msg: TMessage);
  public
   ...
  end;

const
  WM_MYRUNASCHECK = WM_User + 10;

//create..
  FMessageHandle := Classes.AllocateHWnd(ProcMessage)
//destroy..
  if FMessageHandle <> 0 then
    Classes.DeallocateHWnd(FMessageHandle);

procedure TForm1.ProcMessage(var Msg: TMessage);
begin

  if Msg.Msg = WM_MYRUNASCHECK then
  begin
    // schreibe dein Log (Msg.WParam = True oder False)
  end
  else
    Msg.result := DefWindowProc(FMessageHandle, Msg.Msg, Msg.wParam, Msg.LParam);
end;

Jasocul 20. Nov 2020 09:32

AW: Prüfen ob Programm mit "runas" gestartet worden ist.
 
Beide Programme sind von dir, also kannst du die selbst anpassen.

Übergib beim runas doch einfach einen Parameter an das aufzurufende Programm. Diesen Parameter kannst du prüfen und weißt dann, ob es mit runas gestartet wurde.

venice2 20. Nov 2020 09:35

AW: Prüfen ob Programm mit "runas" gestartet worden ist.
 
Zitat:

Zitat von Jasocul (Beitrag 1477609)
Beide Programme sind von dir, also kannst du die selbst anpassen.

Übergib beim runas doch einfach einen Parameter an das aufzurufende Programm. Diesen Parameter kannst du prüfen und weißt dann, ob es mit runas gestartet wurde.

Danke ;)
Sagte ich ihm schon.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:04 Uhr.
Seite 1 von 2  1 2      

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