프로그램이 클라이언트 컴퓨터에 설치되면 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" /> 뿐만 아니라
IsInRoleAnders가 이야기 하는 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;
}
}
실행 파일을 마우스 오른쪽 버튼으로 클릭하고 속성> 호환성으로 이동하여 '이 프로그램을 관리자 권한으로 실행'확인란을 선택하십시오.
모든 사용자에 대해 관리자 권한으로 실행하려면 '모든 사용자에 대한 설정 변경'에서 동일한 작업을 수행하십시오.