Announcement

Collapse
No announcement yet.

Programm zur Laufzeit unter Windows Vista mit Admin Rechten starten?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Programm zur Laufzeit unter Windows Vista mit Admin Rechten starten?

    Hi @ all.

    Ich habe noch eine Frage an Euch.

    Mein Programm "Start.exe" soll ein anderes Programm unter Vista starten.
    Dieses soll aber nicht gleich mit Admin Rechten gestartet werden.

    Erst wenn der User aus dem Menü einen bestimmten Punkt auswählt soll das Programm Start.exe als Admin gestartet werden.
    Als Aktion soll dann das andere Programm gestartet werden.

    Weiss jemand wie das unter Vista geht?

    Auf dem Mac ist das so, dass ein Programm welches als root gestartet ist die Rechte auch an das aufrufende Programm übergibt. Bei Vista ist das auch so habe ich festgestellt. Dadurch kommen dann auch nicht mehr die Fenster "Das Programm möchte auf Ihrten Computer zugreifen".

    Ich habe dafür noch kein Beispiel finden können.

    Auch möchte ich wissen wie ich mit Delphi 7 das ShieldIcon auf einem Button bekomme. In C# ist das kein Problem.
    Ist das ShieldIcon in irgeneiner DLL von wo ich es laden kann?

    danke
    Torsten

  • #2
    Moin Torsten,

    Ich kann Dir nur zum zweiten Punkt helfen:

    "Glyph.Handle:= ExtractAssociatedIcon(HInstance, PChar(aFile), w);"
    "ExtractAssociatedIcon" ist aus "ShellAPI.PAS" -> ggf. einbinden

    Gruß,

    Geert

    Comment


    • #3
      Hi Geert.

      Sorry für die späte Antwort.
      Die Funktion ExtractAssociatedIcon kenne ich schon. Ich wollte nur wissen wo ich das Icon finden kann.

      Für das andere Problem habe ich schon eine Lösung gefunden.

      danke

      Comment


      • #4
        Wie hast du es gelößt

        Hallo Torsten, es wäre nett wenn du deine Lösung zu dem Problem hier beschreiben könntest. Ich stehe gerade vor dem selben Problem.

        Gruß Mathias

        Comment


        • #5
          Hi Mathias.

          Ist ganz einfach.

          Zuerst prüfe ich auf Vista
          Dann schaue ich ob schon Elevated wurde
          Dann rufe ich das Programm selber auf und terminiere die laufende Applikation
          Beim starten des Programms übergebe ich einfach den letzten aufruf des users. Fertig
          Damit bin ich schon zufrieden und es klappt super.
          Lieber wäre mir aber das Programm nicht neu starten zu müssen!

          Das schaut dann so aus....

          In FormCreate steht dann
          //**************************
          isElevated := false;
          if (ParamStr(1) = 'elevation') then isElevated := true;

          if (ParamStr(1) = 'elevation') then
          begin
          case StrToInt(ParamStr(2)) of
          1 : Function1(self);
          2 : Function2(self);
          3 : Function3(self);
          end;
          end;
          //***********************************

          //In irgendeiner Funktion die Admin rechte braucht steht oben immer das hier!
          //****************************************
          if (isVista) then
          if (isElevated=false) then
          begin
          runAsAdmin(0, Application.ExeName, 'elevation 1');
          Close;
          exit;
          end;
          //danach kommt der normale Code
          //****************************************



          function TfrmControl.IsVista: Boolean;
          begin
          Result := Win32MajorVersion = 6;
          end;


          procedure TfrmControl.runAsAdmin(hWnd: HWND; aFile, aParameters: string);
          var
          shellexec: TShellExecuteInfoA;
          begin
          FillChar(shellexec, SizeOf(shellexec), 0);
          shellexec.cbSize := sizeof(shellexec);
          shellexec.Wnd := hWnd;
          shellexec.fMask := SEE_MASK_FLAG_DDEWAIT or SEE_MASK_FLAG_NO_UI;
          shellexec.lpVerb := 'runas';
          shellexec.lpFile := PChar(aFile);
          shellexec.lpParameters := PChar(aParameters);
          shellexec.nShow := SW_SHOWNORMAL;
          if not ShellExecuteEX(@shellexec) then
          RaiseLastOSError;
          end;

          Comment

          Working...
          X