본문 바로가기
delphi

델파이 프로그램에서 관리자 권한으로 실행하기

by doran365 2024. 8. 20.

Delphi로 개발된 프로그램에서 인터넷이나 시스템 자원에 접근할 때, 사용자 권한 문제로 인해 실행이 중단될 수 있습니다. 이 문제를 해결하기 위해서는 프로그램을 관리자 권한으로 실행해야 합니다. 관리자 권한을 통해 프로그램이 원활히 작동하도록 설정하는 방법을 단계별로 알아보겠습니다.

관리자 권한이 필요한 이유

Delphi 프로그램이 관리자 권한으로 실행되지 않으면, 시스템 자원에 접근하거나 특정 작업을 수행할 때 사용자 계정 컨트롤(UAC) 창이 나타나며 프로그램의 실행이 중단될 수 있습니다. 특히, 시스템 파일이나 레지스트리 수정 작업이 필요한 프로그램이라면 관리자 권한 없이 정상적인 작동이 어렵습니다. 따라서, 이러한 문제를 방지하기 위해 프로그램을 관리자 권한으로 실행할 필요가 있습니다.

Delphi에서 관리자 권한으로 실행 설정하기

VCL 어플리케이션 프로젝트 생성

먼저, 관리자 권한으로 실행될 프로그램을 Delphi에서 VCL 어플리케이션으로 개발합니다. 이때 프로젝트 이름은 반드시 고유하게 설정해야 하며, 이 이름은 추후에 .manifest 파일에서도 사용됩니다.

1. "File > New > VCL Application Delphi" 메뉴를 통해 새 프로젝트를 생성합니다.
2. 프로젝트 이름을 예를 들어 `prjUACTest`로 설정합니다.

.manifest 파일 추가

프로그램에 관리자 권한을 부여하기 위해서는 .manifest 파일을 생성하여 프로젝트에 추가해야 합니다. 이 파일은 프로그램이 실행될 때 필요한 권한을 정의합니다.

1. "File > New > Other"에서 "Text File"을 선택하여 새 파일을 생성합니다.
2. 이 파일을 `.manifest` 확장자로 저장하며, 파일 이름은 프로젝트 이름과 동일하게 설정합니다. 예를 들어, `prjUACTest.manifest`.
3. 파일 내용은 다음과 같이 작성합니다:

 

<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <assemblyIdentity version="1.0.0.0" processorArchitecture="x86" name="prjUACTest" type="win32"/>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
      </requestedPrivileges>
    </security>
  </trustInfo>
</assembly>

프로젝트에 .manifest 파일 추가 및 설정

이제 생성한 .manifest 파일을 프로젝트에 추가하고, 이를 프로젝트의 기본 설정으로 적용합니다.

markdown
코드 복사
1. 프로젝트 옵션에서 "Application"을 선택합니다. 2. "Manifest File" 섹션에서 "Custom manifest"를 선택하고, 작성한 `prjUACTest.manifest` 파일을 지정합니다.
1. 프로젝트 옵션에서 "Application"을 선택합니다.
2. "Manifest File" 섹션에서 "Custom manifest"를 선택하고, 작성한 `prjUACTest.manifest` 파일을 지정합니다.​

컴파일 및 실행

이제 프로그램을 컴파일하고 실행하여 관리자 권한으로 작동하는지 확인할 수 있습니다. 디버깅 모드에서 관리자 권한으로 실행이 필요하다면, Delphi IDE 자체를 관리자 권한으로 실행하거나, 프로젝트 옵션을 조정하여 테스트할 수 있습니다.

1. 프로젝트를 컴파일합니다.
2. 컴파일된 실행 파일을 직접 실행하면, 관리자 권한을 요구하는 UAC 창이 나타납니다.
3. "확인"을 클릭하면 프로그램이 관리자 권한으로 실행됩니다.

응용 프로그램에서 런처를 통한 관리자 권한 실행

프로그램 자체에 관리자 권한을 부여하는 것 외에도, 별도의 런처를 사용하여 프로그램을 관리자 권한으로 실행할 수 있습니다. 이 방법은 사용자가 관리자 권한이 필요한 작업을 수행할 때 간편하게 실행할 수 있는 방법입니다.

런처 코드 예제

다음은 Delphi에서 런처를 구현하는 코드 예제입니다. 이 코드는 프로그램이 관리자 권한으로 실행될 수 있도록 합니다.

function RunAsAdmin(filename: string; Parameters: string): Boolean;
var
  sei: TShellExecuteInfo;
begin
  ZeroMemory(@sei, SizeOf(sei));
  sei.cbSize := SizeOf(TShellExecuteInfo);
  sei.fMask := SEE_MASK_FLAG_DDEWAIT or SEE_MASK_FLAG_NO_UI;
  sei.lpVerb := PChar('runas');
  sei.lpFile := PChar(Filename);
  if Parameters <> '' then
    sei.lpParameters := PChar(Parameters);
  sei.nShow := SW_SHOWNORMAL;
  Result := ShellExecuteEx(@sei);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  RunAsAdmin('prjUACTest.exe', '');
end;

위 코드에서는 RunAsAdmin 함수를 통해 프로그램을 관리자 권한으로 실행할 수 있습니다. 이를 버튼 클릭 이벤트에 연결하여 간편하게 관리자 권한으로 프로그램을 실행할 수 있습니다.

권한 상승에 대한 다양한 해결 방법

UAC 설정 변경

기본적으로 Windows에서는 UAC(User Account Control) 설정을 통해 사용자 권한을 제어합니다. UAC 설정을 낮추면 관리자 권한 요청 창이 덜 자주 나타나지만, 이는 보안에 취약할 수 있습니다. 이러한 이유로 프로그램 자체에서 권한 상승을 처리하는 방법이 더 권장됩니다.

WinAPI를 통한 직접적인 권한 상승

Delphi에서는 WinAPI를 활용하여 직접적으로 권한 상승을 처리할 수도 있습니다. 이는 고급 사용자나 시스템에 특화된 기능을 제공하는 프로그램에서 유용할 수 있습니다. 그러나 이 방법은 구현이 복잡하고 유지보수에 어려움이 있을 수 있습니다.

결론

Delphi로 개발된 프로그램이 원활히 실행되기 위해서는 관리자 권한을 적절히 설정하는 것이 중요합니다. .manifest 파일을 통해 권한을 정의하거나, 런처를 활용하여 프로그램을 관리자 권한으로 실행할 수 있습니다. 이 외에도 다양한 방법을 통해 프로그램의 보안성과 안정성을 높일 수 있으며, 이는 사용자 경험을 개선하는 데 중요한 역할을 합니다.