Einzelnen Beitrag anzeigen

RonnyBausA

Registriert seit: 29. Nov 2011
10 Beiträge
 
Delphi XE2 Professional
 
#8

AW: Einzelne Funktionen als Admin ausführen

  Alt 28. Mär 2012, 12:02
@jaenicke,
ich hab das jetzt so gemacht, wie du es vorgeschlagen hast. Ich starte meine Anwendung ein zweites Mal mit ShellExecuteEx und wahlweise 2 Parametern (1x zum Starten und 1x zum Stoppen meines Dienstes).
Code:
function RunAs(const FileName, StartParam: string): Boolean;
 var sefunc: TShellExecuteInfo;
begin
  FillChar(sefunc, SizeOf(sefunc), 0);
  sefunc.cbSize:= SizeOf(sefunc);
  sefunc.Wnd:= 0;
  sefunc.lpVerb:= PChar('runas');
  sefunc.lpFile:= PChar(FileName);
  sefunc.lpParameters:= PChar(StartParam);
  sefunc.nShow:= SW_HIDE;
  Result:= ShellExecuteEx(@sefunc);
end;

procedure TMainForm.DStartBtnClick(Sender: TObject);
begin
  RunAs(Application.ExeName, ' /startts');
end;
In der Projektdatei frage ich ab, ob einer der beiden Paramter übergeben wurde. Wenn ja führe ich meine Admin-Funktionen aus und beende das Programm. Andernfalls fahre ich ganz normal mit dem Erzeugen der Formulare fort und lasse das Programm normal laufen.
Code:
  StartProg := True;
  if ParamCount > 0 then                                                       // Startparameter wurde übergeben
  begin
    if (LowerCase(ParamStr(1)) = '/startts') then                              // Dienst starten
    begin
      ServiceStart('','MyService');
      StartProg := False;                                                      // Das normale Programm nicht ausführen
    end
    else if (LowerCase(ParamStr(1)) = '/stopts') then                          // Dienst stoppen
    begin
      ServiceStop('','MyService');
      StartProg := False;                                                      // Das normale Programm nicht ausführen
    end;
  end;
  if StartProg then
  begin
    Application.CreateForm(TMainForm, MainForm);
    .
    .
    Application.Run;
  end;
Das funktioniert soweit gut. Damit ist meine Frage beantwortet.
Vielen Dank an euch alle.
Ronny
  Mit Zitat antworten Zitat