"ClickOnce는 요청 실행 수준 'requireAdministrator'를 지원하지 않습니다."


93

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

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

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


4
여기에 명백한 사실을 밝히고 싶지는 않지만 권한을 요청하는 매니페스트를 추가requireAdministrator 했고 ClickOnce가 .NET을 지원하지 않는다고 불평하기 시작했습니다requireAdministrator . 문제는 매우 명확해야합니다. ClickOnce는 매니페스트 (응용 프로그램의 일부가 됨)에서 권한 상승의 필요성을 확인합니다. 나는 ... 아니 확실히 무엇보다 당신이 필요 해요
켄 화이트

4
@KenWhite : 그러나 한 번 클릭과 함께 관리자 요구 사항 이 프로젝트를 실행하는 것이 아니라 컴파일 하는 것을 막는다는 것은 완전히 명백하거나 논리적 이지는 않습니다.
500-내부 서버 오류

@ 500-InternalServerError, 논리는 "관리자 필요"를 추가하면 "관리자가 지원되지 않음", IMO와 관련이 있기 때문에 컴파일되지 않는다는 사실만으로 인과 관계가 존재한다는 사실을 알려줍니다. :-)
Ken White

1
문제는 ClickOnce와 관리자 권한을 사용하고 싶다는 것이 아니라 관리자 권한을 사용하고 싶어서 이전에 (약 10 회) 컴파일 한 것이 문제이지만 이번에는 ClickOnce가 호환되지 않는다고 말합니다.
LMS

10
@KenWhite 문제는 당신이 제안한 것만 큼 명확하지 않습니다. 이 문제는 "게시"단추를 클릭 할 때 발생합니다 (적어도 저에게는 그랬습니다). 매니페스트를 추가하고 "requireAdministrator"를 선택한 후 프로그램이 완벽하게 작동했습니다. 게시를 클릭했을 때만이 오류가 발생하기 시작했고 설정으로 이동하여 "ClickOnce"를 비활성화 할 때까지 지울 수 없었습니다. 따라서 해결책은 "requireAdministrator"가 지원되지 않는 것이 아니라 "ClickOnce"를 사용할 수없고 "requireAdministrator"가 설정되어있는 경우 "게시"를 클릭 할 수 없다는 것입니다.
Gavin Coates

답변:


147

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

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


실물:

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


3
아, 내가 그 오류 메시지에서 명백했다 생각 당신이있어)
500 - 내부 서버 오류

3
나를 혼란스럽게 한 것은 ClickOnce를 활성화하지 않았다는 것입니다.
LMS

좋은 질문과 답변이 도움이되었습니다. 감사합니다!
Moh

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

1
@GavinCoates가 말하는 것은 정확합니다. 그 이유는 ClickOnce 응용 프로그램이 항상 해당 AppData폴더의 사용자별로 설치되기 때문 입니다. 권한 상승으로 인해 ClickOnce 응용 프로그램이 설치되지 않은 사용자 컨텍스트가 전환됩니다.
bertl

43

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

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

여기에 이미지 설명 입력


3
그리고 응용 프로그램을 게시 할 때이 확인란이 다시 선택됩니다.
dikkini

@dikkini, 정확히! 그것을 비활성화하는 방법, 누구든지 대답이 있습니까?
saidfagan 2010

@saidfagan이 사건에 대한 답변이나 해결책이 없습니다. util ULMerge를 사용하여 exe 및 dll 파일을 결합합니다.
dikkini

18

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


16

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

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

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

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


그것은으로 디버거에 연결하지 않는 정의 새로운 인스턴스를 시작 .. (새로운 무료 (무소속) 예에 호출하고 가까운 사람이 디버거에 연결)
deadManN

1
@deadManN 매우 사실입니다. 그 시점에 도달했을 때 디버거가 필요하지 않았기 때문에 주위를 둘러 보았지만 VS를 관리자로 실행할 수 있다고 가정하면 프로그램도 관리자 모드로 시작됩니다. 다시 시작을 건너 뜁니다. 확실하게 테스트하겠습니다.
Tyler C

1
이것에 걸려 넘어지는 사람에게는 위의 내용이 실제로 작동합니다.
Tyler C

>> 현재 컨텍스트에 'Application'이라는 이름이 없습니다. 오류
V 시리즈

이 코드는 새 프로세스 만 시작하지만 내 앱은 콘솔이므로 인수는 비워 둡니다.
V 시리즈

5

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

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


2

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

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

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

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

2
OP는 응용 프로그램의 레지스트리에 대한 액세스가 필요하다고 말하므로 옵션이 아닙니다.
LeeCambl 2015 년

requireAdministrator레지스트리에 쓰기 위해서는 권한이 필요하므로 이는 필수 사항입니다.
SkiSharp

ClickOnce는 요청 실행 수준을 지원하지 않습니다.asInvoke
SkiSharp

2

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


2

다음은 VB.NET 용 코드 스 니펫입니다.

If Not New WindowsPrincipal(WindowsIdentity.GetCurrent).IsInRole(WindowsBuiltInRole.Administrator) Then
            Process.Start(New ProcessStartInfo With { _
                                                     .UseShellExecute = True, _
                                                     .WorkingDirectory = Environment.CurrentDirectory, _
                                                     .FileName = Assembly.GetEntryAssembly.CodeBase, _
                                                     .Verb = "runas"})

편집 :하지만 이런 방식으로 배포하면 일부 AV 소프트웨어가 코드를 차단합니다.


1

"ClickOnce 보안 설정 사용"을 선택 취소하는 경우 작동하지 않는 경우 내가 찾은 방법을 시도해보십시오.

먼저 app.manifest requestedExecutionLevel 항목을 그대로 둡니다.

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

그런 다음 Program.cs 파일을 다음과 같이 편집합니다.

using System;
using System.Diagnostics;
using System.Reflection;
using System.Security.Principal;
using System.Windows.Forms;

다음과 같은 주요 방법을 재구성하십시오.

    static void Main()
        {
            var wi = WindowsIdentity.GetCurrent();
            var wp = new WindowsPrincipal(wi);

            bool runAsAdmin = wp.IsInRole(WindowsBuiltInRole.Administrator);

            if (!runAsAdmin)
            {
                // It is not possible to launch a ClickOnce app as administrator directly,
                // so instead we launch the app as administrator in a new process.
                var processInfo = new ProcessStartInfo(Assembly.GetExecutingAssembly().CodeBase);

                // The following properties run the new process as administrator
                processInfo.UseShellExecute = true;
                processInfo.Verb = "runas";

                // Start the new process
                try
                {
                    Process.Start(processInfo);
                }
                catch (Exception)
                {
                    // The user did not allow the application to run as administrator
                    MessageBox.Show("Sorry, but I don't seem to be able to start " + 
                       "this program with administrator rights!");
                }

                // Shut down the current process
                Application.Exit();
            }
            else
            {
                // We are running as administrator
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new Form1());
            }
        }

Windows 10 및 Visual Studio 2019에서 작동합니다!


1

이 문제를 겪는 사람을 위해 나는 결국 나를 위해 일하는 것을 기여할 것이라고 생각했습니다.

예, 'ClickOnce 보안 설정 사용'옵션은 빌드> 게시 를 수행 할 때 선택 취소하면 자동으로 다시 선택됩니다 .

저에게는 '게시'할 필요가 없습니다. 사용자를 위해 예약 된 작업을 생성하는 간단하고 이식 가능한 .exe이며 관리자로 로그인 한 경우에도 권한이 상승되었는지 확인해야했습니다.

그래서 방금 \ bin \ Release 에서 내 최신 .exe를 가져 왔고 이것이 내 클라이언트의 시스템에 배포되는 것입니다.

예상대로 작동했습니다. 즉, UAC가 활성화 된 / 최고 설정으로 시스템에 설치하면 .exe에 '방패'가 표시되고 관리자로 로그인 한 경우에도 실행하면 상승하고 UAC 프롬프트가 표시됩니다.

내 작은 작업 스케줄러 앱은 이제 '액세스 거부'오류없이 작업을 만들 수 있습니다 (이전에는 .exe를 마우스 오른쪽 단추로 클릭하고 관리자 권한으로 실행을 클릭하여 해결할 수 있음).


나는 똑같은 문제가 있었고 위의 답변 중 어느 것도 작동하지 않았습니다. 보안 설정을 한 번 클릭하면 다시 작업하기를 바랍니다. 대부분의 경우, 특히 온라인에 게시되는 앱의 경우 절대적으로 필요하고 좋은 기능이지만 지역 기반 간행물에 대해서만 더 나은 옵션 / 해결 방법이 있었으면합니다.
SkiSharp

-12

다만

Imports System.security

U는 오류가 없으며 응용 프로그램은 관리자로 실행됩니다.


1
어셈블리에 대한 참조 만 할당하는 것만으로는 대부분의 경우 코드가 실행되지 않습니다. 더 이상 게시하지 않으면 아무것도 알려주지 않습니다. 이 게시물은 관리 레지스트리 편집 및보다 구체적으로 ClickOnce 어셈블리를 생성하는 Visual Studio 게시 옵션을 통해 배포하는 요구 사항과 관련됩니다. 명확성 부족 또는 명백한 관련성에 대해 비추천했습니다.
Anthony Mason

이건 ... 이건 아니야. 이것은 줄 수를 1만큼 늘리는 것 외에는 아무것도하지 않습니다. 개체에 대한 참조가없는 어셈블리를 참조하거나 해당 어셈블리 내에서 메서드를 호출하면 아무 작업도 수행되지 않습니다. 이전 의견이 언급했듯이.
SkiSharp
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.