[c#] “ClickOnce는 요청 실행 수준 ‘requireAdministrator’를 지원하지 않습니다.”

그래서 저는 레지스트리에 액세스해야하는 응용 프로그램을 작성했습니다. 빌드 설정을 건드리지 않았고 설명이나 이름과 같은 다른 터치를 추가하기 전에 작업을 수행하고 싶었습니다.

갑자기 사라지지 않는 오류가 발생합니다. ClickOnce does not support the request execution level 'requireAdministrator'.이제이 응용 프로그램에서 ClickOnce를 건드리지 않았습니다. 내가 한 것은 이러한 권한을 요청하는 매니페스트 파일을 포함하는 것뿐이었습니다.

내 문제는이 오류가 사라지지 않고 내 프로그램을 컴파일 할 수 없다는 것입니다. 해야 할 일에 대한 조언이 있습니까? (참고 : 잠자리에 들려고하므로 내일 오후에 확인하겠습니다.)



답변

편집 : 이 의견도 좋은 답변을 제공합니다.

원하든 원하지 않든 한 번 클릭하면 “게시”를 클릭 할 때마다 활성화됩니다. “requireAdministrator”를 사용하는 경우 ClickOnce를 사용할 수 없으므로 프로젝트를 “게시”할 수 없습니다.


실물:

보안 탭에서 “ClickOnce 보안 설정 사용”이 선택되어있는 것으로 나타났습니다. 나는 그것을 확인하지 않았지만. 어쨌든 ClickOnce를 중지하면 오류가 발생합니다. 찾는 데 시간이 좀 걸렸습니다 …


답변

나는 이것이 오래된 질문이라는 것을 알고 있지만 2 년 후에 여기에 왔습니다.

프로젝트 속성의 보안 탭에서 ClicKOnce를 비활성화하여 문제를 해결할 수 있습니다. 아래 참조 :

여기에 이미지 설명 입력


답변

게시 마법사 또는 ‘지금 게시’를 사용하는 경우 한 번 클릭 확인란이 자동으로 선택됩니다.


답변

나는 이것이 오래되었다는 것을 알고 있지만 답을 찾기 위해 우연히 발견했습니다. 제 경우에는 게시 기능을 사용하고 있으며 계속 사용해야합니다. 관리자 기능에 대한 액세스 권한도 필요합니다. 따라서 위의 답변 중 어느 것도 나를 위해 일하지 않았습니다.

결국 관리자로 실행되고 있는지 확인하고 그렇지 않은 경우 관리자로 다시 시작하는 방법을 내 응용 프로그램의 맨 처음에 추가했습니다. 이렇게하려면 다음 참조를 추가해야합니다.

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.
}

도움이 되었기를 바랍니다!


답변

이 작업은 “ClickOnce 보안 설정 사용”(설명 된대로 게시 중에 “선택 취소”할 수 없기 때문에)을 선택한 다음 “부분 신뢰 응용 프로그램입니다”를 선택하여 수행 할 수 있습니다. 드롭 다운 메뉴에서 “로컬 인트라넷”이 자동으로 선택됩니다.

변경 사항을 저장하고 응용 프로그램을 게시하고 완료하십시오. 🙂보안 설정 스 니펫


답변

app.Manifest 파일을 살펴보면 다음과 같이 표시됩니다.

 <requestedExecutionLevel  level="requireAdministrator" uiAccess="false" />

주석에 지침이 있지만 “requireAdministrator”를 삭제하고 삽입하면 문제가 해결됩니다.

 <requestedExecutionLevel  level="asInvoker" uiAccess="false" />


답변

동일한 문제가 있습니다. ” ClickOnce 보안 설정 사용 “을 선택 취소하여 해결합니다
. Visual Studio에서이 옵션을 찾으려면 프로젝트를 마우스 오른쪽 단추로 클릭합니다. ==> properties ==> 보안 선택 ==> ClickOnce 보안 설정 사용 (이 옵션은 이미 확인 했으므로 확인을 취소하고 문제가 해결되었습니다.)