Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Vista - EXE aus Anwendung starten ohne UAC Belästigungen? (https://www.delphipraxis.net/108011-vista-exe-aus-anwendung-starten-ohne-uac-belaestigungen.html)

moelski 6. Feb 2008 11:17


Vista - EXE aus Anwendung starten ohne UAC Belästigungen?
 
Moin !

Ich habe eben das Tool "devcon" von Microsoft entdeckt. Ein klasse Command Line Tool das den Gerätemanager abbildet. Mit dem Tool kann man. z.B. alle seriellen Ports im System mit Treiber, komplettem Namen, Device ID, etc etc ermitteln.

Doch nun zum Problem... Wenn ich dieses Tool über TDosCommand starte und den Output abfangen will, dann geht das schwer in die Hose. Denn Vista kennt das Program nicht und fragt erstmal nach ob man es denn wirklich starten will. Und zu allem Überfluss landen die Ausgaben dann auch nicht in einem Memo, sondern es geht eine zusätzliche CMD auf, dort sehe ich dann die Ausgaben von Devcon kurz aufflackern und dann ist ende. Mein Memo ist leer :evil:

Kann mir jemand beschreiben wie ich unter Vista einen zusätzlichen Prozess starten kann, ohne Abfrage ob denn Vista den Prozess auch wirklich starten darf und wo ich auch den Output abfangen kann?

Bernhard Geyer 6. Feb 2008 11:19

Re: Vista - EXE aus Anwendung starten ohne UAC Belästigungen
 
Zitat:

Zitat von moelski
Kann mir jemand beschreiben wie ich unter Vista einen zusätzlichen Prozess starten kann, ohne Abfrage ob denn Vista den Prozess auch wirklich starten darf ...

Geht nicht, gibts nicht! Du mußt deinen Prozess schon mit dieser "Belästigung" starten wenn dieser Teil deinens Systems lokale Adminrechte benötigt.

moelski 6. Feb 2008 11:20

Re: Vista - EXE aus Anwendung starten ohne UAC Belästigungen
 
Ich habs fast befürchtet.

So eine Gülle :kotz: Sch**** Vista

OregonGhost 6. Feb 2008 11:22

Re: Vista - EXE aus Anwendung starten ohne UAC Belästigungen
 
Wenn Vista ernsthaft fragt, ob es das Programm starten darf, weil es es nicht kennt, dann bist du hier nicht auf die UAC gestoßen, sondern auf einen Schutz, den z.B. der Internet Explorer an Downloads anhängt. Wenn du jedoch doch die UAC meinst (und dann fragt Vista nicht, ob es das Programm starten darf, sondern ob das Programm Admin-Rechte bekommen darf), dann ist die Antwort einfach: Starte das aufrufende Programm als Admin. Aus Sicherheitsgründen darf ein elevated Programm nicht mit deinem Nicht-Admin-Programm kommunizieren, also musst du dich im Vorfeld auf dieselbe Ebene heben, um nicht nur die Abfrage zu vermeiden, sondern auch eine Kommunikation zu ermöglichen. Und ich gebe dir einen Tipp: Wenn UAC für dich nur eine Belästigung darstellt, schalte sie ab. Ansonsten ist es hilfreich, sich auch mal Gedanken darüber zu machen, wofür sie da ist, dann kommt man nämlich auch drauf, warum bestimmte Dinge so laufen, wie sie laufen.

Edit: Ich schicke mal trotz rotem Kasten ab, ist etwas mehr drin in meinem Beitrag.

Edit: Noch eine Ergänzung: Denk mal drüber nach. devcon benötigt Admin-Rechte. Du forderst wahlweise, dass es Adminrechte bekommt, ohne dass der Benutzer bescheid weiß (Umgehung der UAC => Sicherheitsproblem), oder du hast ein Programm, dass nur mit Admin-Rechten läuft, aber weißt nichtmal was davon. Beides zeugt nicht unbedingt von besonders durchdachtem Software-Design.

moelski 6. Feb 2008 11:30

Re: Vista - EXE aus Anwendung starten ohne UAC Belästigungen
 
Moin !

Unsere Software braucht keine Admin Rechte. Frage mich allerdings warum Devcon zwingend Adminrechte braucht. Denn als normaler User kann ich im Gerätemanager ja auch Infos auslesen.

Zitat:

Wenn UAC für dich nur eine Belästigung darstellt, schalte sie ab
Das hilft aber keinem User ...

Naja es wird wohl doch darauf hinauslaufen das wir uns die nötigen Infos selber mühselig aus der Registry zusammentragen müssen.

mkinzler 6. Feb 2008 11:45

Re: Vista - EXE aus Anwendung starten ohne UAC Belästigungen
 
Dort wirst du aber nicht fündig werden.
-Die Zoneninformationen stehen in ADS
-die Abhängigkeit vom Adminrecht im Manifest/Dateinamen
Und falls du vor hast die UAC programmatisch abzuschalten, musst du in Kauf nehmen, dass dein Programm schnell von Virenscannern erkannt wird.

moelski 6. Feb 2008 11:56

Re: Vista - EXE aus Anwendung starten ohne UAC Belästigungen
 
Moin mkinzler,

Zitat:

-Die Zoneninformationen stehen in ADS
-die Abhängigkeit vom Adminrecht im Manifest/Dateinamen
Das mag ja sein. Aber wir brauchen ausschließlich Informationen über serielle Ports im System. Und das steht in der Registry. Dort lesen wir ja jetzt schon rudimentär aus.

Nuclear-Ping 6. Feb 2008 12:16

Re: Vista - EXE aus Anwendung starten ohne UAC Belästigungen
 
Dafür gibt es aber auch Komponenten für Delphi, die den Gerätemanager auslesen. Die SetupAPI von JEDI z.B., da hats afaik sogar Beispiele.

[edit]
Beispiel, so wie ich's in nem akt. Projekt mache - Und ja, das funzt auch unter Vista:
Delphi-Quellcode:
function GetRegistryPropertyString(PnPHandle: HDEVINFO; const DevData:
  TSPDevInfoData; Prop: DWORD): string;
var
  BytesReturned: DWORD;
  RegDataType: DWORD;
  Buffer: array [0..256] of TCHAR;
begin
  BytesReturned := 0;
  RegDataType := 0;
  Buffer[0] := #0;
  SetupDiGetDeviceRegistryProperty(PnPHandle, DevData, Prop,
  RegDataType, PByte(@Buffer[0]), SizeOf(Buffer), BytesReturned);
  Result := Buffer;
end;

function GetCOMMDevices: TStringList;
const
  ConnectorGUID = '{4D36E978-E325-11CE-BFC1-08002BE10318}';
var
  GUID: PGUID;
  Buffer: array[0..1023] of TCHAR;
  NameBuffer: array[0..1023] of Char;
  Descriptionstr: string;
  PnPHandle: HDEVINFO;
  DevData: TSPDevInfoData;
  DeviceInterfaceData: TSPDeviceInterfaceData;
  Success: LongBool;
  BufSize: DWORD;
  Devn: Integer;
  S: string;
  aguid: Tguid;
begin
  LoadSetupApi;
  LoadConfigManagerApi;
  GetMem(GUID, SizeOf(TGUID));
  guid^ := StringToGUID(ConnectorGUID);
  SetupDiGetClassDescription(GUID^, @Buffer[0], Length(Buffer), BufSize);
  Descriptionstr := PTSTR(@Buffer[0]);
  Result := TStringList.Create;

  aguid := Guid^;
  PnPHandle := SetupDiGetClassDevs(@AGUID, nil, 0, DIGCF_PRESENT);
  //PnPHandle := SetupDiGetClassDevs(@AGUID, nil, 0, 0);
  if PnPHandle = Pointer(INVALID_HANDLE_VALUE) then
    begin
      FreeMem(GUID);
      //Result := '';
      Exit;
    end;
  Devn := 0;
  repeat
    DeviceInterfaceData.cbSize := SizeOf(TSPDeviceInterfaceData);
    DevData.cbSize := SizeOf(DevData);
    Success := SetupDiEnumDeviceInfo(PnPHandle, Devn, DevData);
    if Success then
      begin
        S := GetRegistryPropertyString(PnPHandle, DevData, SPDRP_FRIENDLYNAME);
        if S = '' then
          S := GetRegistryPropertyString(PnPHandle, DevData, SPDRP_DEVICEDESC);

        Result.Add (S);
        {
        if Pos(UMtsappli, s) > 0 then
          begin
            Result := StrBetween(s, '(', ')');
          end;
        }

        Inc(Devn);
      end;
  until not Success;
  SetupDiDestroyDeviceInfoList(PnPHandle);

  UnloadConfigManagerApi;
  UnloadSetupApi;
end;
Code ist nicht von mir. Hab ich glaube hier im Forum gefunden. Also Credits gehen an den jeweiligen Author. ^^

Die Funktion liefert dir im Zusammenhang mit der SetupAPI von JEDI die seriellen Ports im System als TStringList zurück.
[/edit]

OregonGhost 6. Feb 2008 12:22

Re: Vista - EXE aus Anwendung starten ohne UAC Belästigungen
 
Zitat:

Zitat von moelski
Unsere Software braucht keine Admin Rechte. Frage mich allerdings warum Devcon zwingend Adminrechte braucht. Denn als normaler User kann ich im Gerätemanager ja auch Infos auslesen.

Also, wenn ich unter Systemeigenschaften auf Gerätemanager klicke, meldet sich UAC. Es ist also offenbar nicht vorgesehen, dass ein normaler Benutzer darin rumpfuscht. Es zwingt dich außerdem ja niemand, devcon zu verwenden. Dieses will Admin-Rechte und damit ist dir jegliche Möglichkeit verwehrt, es ohne Admin-Rechte zu verwenden.


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