프로그램이 클라이언트 컴퓨터에 설치되면 Windows 7 에서 프로그램을 관리자로 강제 실행하려면 어떻게해야 합니까?
프로그램이 클라이언트 컴퓨터에 설치되면 Windows 7 에서 프로그램을 관리자로 강제 실행하려면 어떻게해야 합니까?
답변:
프로그램에 포함 된 매니페스트를 수정하려고합니다. Visual Studio 2008 이상에서 작동합니다. Project + Add New Item, "Application Manifest File"을 선택하십시오. <requestedExecutionLevel>
요소를 다음과 같이 변경하십시오 .
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
사용자는 프로그램을 시작할 때 UAC 프롬프트를 받습니다 . 현명하게 사용하십시오. 그들의 인내심은 빨리 마모 될 수 있습니다.
requestedExecutionLevel
매니페스트에 요소를 추가하는 것은 전투의 절반에 불과합니다. UAC 를 끌 수 있다는 것을 기억해야 합니다. 그렇다면 사용자가 관리자가 아닌 경우 구식 방법을 확인하고 오류 대화 상자를 표시해야합니다
( IsInRole(WindowsBuiltInRole.Administrator)
스레드의 전화 CurrentPrincipal
).
<requestedExecutionLevel level="highestAvailable" uiAccess="false" />
뿐만 아니라
IsInRole
Anders가 이야기 하는 MSDN 예제는 다음과 같습니다 .
자세한 단계는 다음과 같습니다.
이 코드를 사용하면 ClickOnce의 보안 설정을 해제해야합니다. 이렇게하려면 속성-> 보안-> ClickOnce 보안으로 이동하십시오.
New Item...
설치 프로그램 서비스 프로젝트에서 옵션이 아닙니다. 앱 매니페스트 추가는 어떻게합니까? 메인 프로젝트에는 추가 할 수 있지만 설치 프로그램은 아닙니다.
수동으로 코드를 구현했습니다.
using System.Security.Principal;
public bool IsUserAdministrator()
{
bool isAdmin;
try
{
WindowsIdentity user = WindowsIdentity.GetCurrent();
WindowsPrincipal principal = new WindowsPrincipal(user);
isAdmin = principal.IsInRole(WindowsBuiltInRole.Administrator);
}
catch (UnauthorizedAccessException ex)
{
isAdmin = false;
}
catch (Exception ex)
{
isAdmin = false;
}
return isAdmin;
}
EXE 파일에 매니페스트 파일을 포함하면 Windows (7 이상)가 항상 관리자 권한으로 프로그램을 실행하게됩니다.
6 단계 : UDN (Application Manifest) 작성 및 임베드 (MSDN) 에서 자세한 정보를 찾을 수 있습니다 .
Visual Studio 2008에서 작업하는 동안 마우스 오른쪽 단추를 클릭 Project -> Add New Item
하고을 선택하십시오 Application Manifest File
.
매니페스트 파일에는 태그 requestedExecutionLevel
가 있으며 레벨을 세 가지 값으로 설정할 수 있습니다.
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
또는
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
또는
<requestedExecutionLevel level="highestAvailable" uiAccess="false" />
응용 프로그램이 관리자로 실행되도록 설정하려면 중간 응용 프로그램을 선택해야합니다.
에 따라
<requestedExecutionLevel level="highestAvailable" uiAccess="false" />
애플리케이션 매니페스트가 없거나 추가하는 방법을 모르는 경우 애플리케이션 매니페스트를 추가하려고합니다. 일부 프로젝트는 별도의 매니페스트 파일을 자동으로 추가하지 않으므로 먼저 프로젝트 속성으로 이동하여 응용 프로그램 탭으로 이동 한 다음 프로젝트가 탭 하단의 매니페스트를 제외하지 않는지 확인하십시오.
코드에서만이 작업을 수행하는 또 다른 방법은 @NG의 답변 과 같이 프로세스가 관리자로 실행되고 있는지 감지 하는 것입니다. . 그런 다음 응용 프로그램을 다시 열고 현재 응용 프로그램을 닫으십시오.
응용 프로그램 자체를 서비스로 설치할 때와 같이 특정 조건에서 실행될 때 응용 프로그램에 관리자 권한 만 필요한 경우이 코드를 사용합니다. 따라서 다른 답변이 강제로 수행하는 것처럼 항상 관리자 권한으로 실행할 필요가 없습니다.
아래 코드 NeedsToRunAsAdmin
는 현재 조건에서 관리자 권한이 필요한지 여부를 감지하는 방법입니다. 이것이 반환 false
되면 코드는 스스로 상승하지 않습니다. 이것은 다른 방법보다이 방법의 주요 이점입니다.
이 코드에는 위에서 언급 한 장점이 있지만 항상 원하는 것은 아닌 새로운 프로세스로 다시 시작해야합니다.
private static void Main(string[] args)
{
if (NeedsToRunAsAdmin() && !IsRunAsAdmin())
{
ProcessStartInfo proc = new ProcessStartInfo();
proc.UseShellExecute = true;
proc.WorkingDirectory = Environment.CurrentDirectory;
proc.FileName = Assembly.GetEntryAssembly().CodeBase;
foreach (string arg in args)
{
proc.Arguments += String.Format("\"{0}\" ", arg);
}
proc.Verb = "runas";
try
{
Process.Start(proc);
}
catch
{
Console.WriteLine("This application requires elevated credentials in order to operate correctly!");
}
}
else
{
//Normal program logic...
}
}
private static bool IsRunAsAdmin()
{
WindowsIdentity id = WindowsIdentity.GetCurrent();
WindowsPrincipal principal = new WindowsPrincipal(id);
return principal.IsInRole(WindowsBuiltInRole.Administrator);
}
runas
관리자가 아닌 사용자의 관리자 권한으로 무언가를 시작할 수 있으려면 UAC를 활성화해야 합니다. 그렇지 않으면 현재 사용자 권한 (Windows 7 64 비트에서 확인 됨)으로 자동으로 열립니다. UAC를 비활성화하고 관리자 권한이 누락 된 유일한 방법은 적절한 순간에 실행을 중지하는 것입니다.
ClickOnce 보안 설정을 사용하여 매니페스트를 생성 한 다음 비활성화 할 수 있습니다.
Right click on the Project -> Properties -> Security -> Enable ClickOnce Security Settings
파일을 클릭하면 app.manifest 라는 프로젝트의 속성 폴더 아래에 파일이 만들어지며 Enable ClickOnce Security Settings
옵션을 선택 취소 할 수 있습니다
해당 파일을 열고 다음 줄을 변경하십시오.
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
에:
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
프로그램에 관리자 권한이 필요합니다.
이것은 @NG에 의해 위 답변 의 단순화 된 버전입니다.
public bool IsUserAdministrator()
{
try
{
WindowsIdentity user = WindowsIdentity.GetCurrent();
WindowsPrincipal principal = new WindowsPrincipal(user);
return principal.IsInRole(WindowsBuiltInRole.Administrator);
}
catch
{
return false;
}
}
실행 파일을 마우스 오른쪽 버튼으로 클릭하고 속성> 호환성으로 이동하여 '이 프로그램을 관리자 권한으로 실행'확인란을 선택하십시오.
모든 사용자에 대해 관리자 권한으로 실행하려면 '모든 사용자에 대한 설정 변경'에서 동일한 작업을 수행하십시오.