Q&A

  • [질문]Vista(Delphi5)에서 관리자로 프로그램을 실행하는방법
안녕하세요?

비스타에서 프로그램실행시 권한상승을 할 수 있는 방법을 찾다가 이정욱님께서 팁을 제공해 주신것으로 해보았지만, 프로젝트 유닛에 어떻게 코드를 추가해야할지 잘 몰라 문의를 드립니다.

아래코드(RunAsAdmin함수)는 OS가 비스타이면 프로그램을 관리자권한으로 실행하는 것입니다. 그런데 아래코드를 사용하면 비스타에서 프로그램을 관리자로 실행시키기위해 또다시 실행화일을 만들어야 하는 번거로움이 있더군요. 저는 프로젝트 유닛에 관리자권한만 부여하는 코드만 추가하고 싶은데 말입니다. 어떻게 수정해야 될른지요? 권한상승창은 나와도 좋고 그렇지 않아도 좋습니다.  Delphi5이구요, 답변 주시면 고맙겠습니다. 즐거운 저녁되세요.


program Project1;   //프로젝트 유닛
uses
  Forms,
{$R *.RES}
begin
  Application.Initialize;

  //OS가 비스타이면
  if (isVista) then  
  begin

    path1:=ExtractFilePath(Application.ExeName)+'Project1.exe';
    RunAsAdmin(0,path1,''); //비스타에서 관리자권한으로 프로그램을 실행하도록 하는 함수.
    //이부분에서 프로그램(Project1.exe)을 실행하지는 말고 관리자권한만 부여하고 싶음.
  end

  Application.Run;
end.


//관리자권한으로 프로그램을 실행하도록 하는 함수
procedure RunAsAdmin(hWnd:HWND;aFile,aParameters:string);
var
  sei:TShellExecuteInfoA;
begin
  ZeroMemory(@sei,SizeOf(sei));
  with sei do
  begin
    cbSize:=SizeOf(sei);
    Wnd:=hWnd;
    fMask:=SEE_MASK_FLAG_DDEWAIT or SEE_MASK_FLAG_NO_UI;
    lpVerb:='runas';
    lpFile:=PChar(aFile);
    lpParameters:=PChar(aParameters);
    nShow:=SW_SHOWNORMAL;
  end;

  if (not ShellExecuteExA(@sei)) then
    //RaiseLastOSError;
    RaiseLastWin32Error;
end;
2  COMMENTS