나는 이것이 오래되었다는 것을 알고 있지만 답을 찾기 위해 우연히 발견했습니다. 제 경우에는 게시 기능을 사용하고 있으며 계속 사용해야합니다. 관리자 기능에 대한 액세스 권한도 필요합니다. 따라서 위의 답변 중 어느 것도 나를 위해 일하지 않았습니다.
결국 관리자로 실행되고 있는지 확인하고 그렇지 않은 경우 관리자로 다시 시작하는 방법을 내 응용 프로그램의 맨 처음에 추가했습니다. 이렇게하려면 다음 참조를 추가해야합니다.
using System;
using System.Diagnostics;
using System.Reflection;
using System.Security.Principal;
그런 다음 주 메서드가 쉽게 액세스 할 수있는 어딘가에이를 배치해야합니다. WPF를 사용하고 있으므로 MainWindow.xaml.cs에 추가했지만 코드의 초기 단계에 추가 할 수 있습니다. 필요한 경우 이러한 메서드에 "정적"을 추가하는 것을 잊지 마십시오.
private void AdminRelauncher()
{
if (!IsRunAsAdmin())
{
ProcessStartInfo proc = new ProcessStartInfo();
proc.UseShellExecute = true;
proc.WorkingDirectory = Environment.CurrentDirectory;
proc.FileName = Assembly.GetEntryAssembly().CodeBase;
proc.Verb = "runas";
try
{
Process.Start(proc);
Application.Current.Shutdown();
}
catch(Exception ex)
{
Console.WriteLine("This program must be run as an administrator! \n\n" + ex.ToString());
}
}
}
private bool IsRunAsAdmin()
{
try
{
WindowsIdentity id = WindowsIdentity.GetCurrent();
WindowsPrincipal principal = new WindowsPrincipal(id);
return principal.IsInRole(WindowsBuiltInRole.Administrator);
}
catch (Exception)
{
return false;
}
}
마지막으로 프로그램 시작시 메서드에 대한 참조를 추가합니다. 제 경우에는 MainWindow에 추가했지만 Main에도 추가했습니다.
public MainWindow()
{
InitializeComponent();
AdminRelauncher(); //This is the only important line here, add it to a place it gets run early on.
}
도움이 되었기를 바랍니다!
requireAdministrator
했고 ClickOnce가 .NET을 지원하지 않는다고 불평하기 시작했습니다requireAdministrator
. 문제는 매우 명확해야합니다. ClickOnce는 매니페스트 (응용 프로그램의 일부가 됨)에서 권한 상승의 필요성을 확인합니다. 나는 ... 아니 확실히 무엇보다 당신이 필요 해요