"ClickOnce не поддерживает уровень выполнения запроса" requireAdministrator "."

Итак, я писал приложение, которое требует доступа к реестру. Я не касался каких-либо настроек сборки, желая, чтобы эта работа работала до того, как я добавил другие касания, такие как описание или имя.

Внезапно я получаю сообщение об ошибке, которое не исчезнет. ClickOnce does not support the request execution level 'requireAdministrator'. Теперь я не коснулся ClickOnce в этом приложении. Все, что я сделал, это включить файл манифеста, запрашивающий эти разрешения.

Моя проблема в том, что эта ошибка не исчезнет, ​​и я не могу скомпилировать мою программу. Любые советы о том, что делать? (Боковое замечание: я собираюсь ложиться спать, поэтому я проверю это завтра днем).

Ответ 1

Изменить: Этот комментарий также дает хороший ответ.

Нажмите один раз, чтобы включить его, когда вы нажимаете "Опубликовать", хотите ли вы этого или нет! Если вы используете "requireAdministrator", то кажется, что вы не можете использовать ClickOnce и, следовательно, не можете "Опубликовать" свой проект.


Оригинал:

Оказывается, что на вкладке "Безопасность" была отмечена опция "Включить параметры безопасности ClickOnce". Хотя я этого не проверял. В любом случае, сняв флажок, это остановило ClickOnce, давая мне ошибки. Это заняло некоторое время, чтобы найти...

Ответ 2

Я знаю этот старый вопрос, но я пришел сюда два года спустя, поэтому:

Вы можете отключить ClicKOnce со вкладки "Безопасность" для обеспечения прав проекта, чтобы помочь решить проблему; см. ниже:

enter image description here

Ответ 3

Если вы когда-либо использовали мастер публикации или "Опубликовать сейчас", флажок "Щелчок один раз" автоматически выбирается...

Ответ 4

Я знаю, что это старо, но я наткнулся на это в поисках ответов. В моем случае я использую функцию публикации, и мне нужно продолжать ее использовать. Мне также нужен доступ к возможностям администратора. По этой причине ни один из приведенных выше ответов не работал для меня.

Я закончил тем, что в самом начале своего приложения добавил метод, который проверяет, запускается ли он от имени администратора, а если нет, перезапускает себя от имени администратора. Для этого вам нужно добавить следующие ссылки.

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

Затем вам нужно будет поместить это куда-нибудь, к чему ваш основной метод имеет удобный доступ. Я использую WPF, поэтому я добавил его в MainWindow.xaml.cs, но вы можете добавить его где угодно в начале своего кода. Просто не забудьте добавить "static" к этим методам, если вам это нужно.

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

Надеюсь это поможет!

Ответ 5

Взгляните в файл app.Manifest, и вы увидите следующее:

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

Там инструкции там в комментариях, но просто удаление "requireAdministrator" и вставить это в это место решить проблему для меня:

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

Ответ 6

У меня такая же проблема s Я разрешаю это, сняв флажок " Включить параметры безопасности ClickOnce" Чтобы найти этот параметр в Visual Studio, щелкните правой кнопкой мыши на свой Проект == > Свойства == > Выберите Безопасность == > Включите параметры безопасности ClickOnce (этот параметр уже был проверен, поэтому я снял флажок, и моя проблема решена).

Ответ 7

Это действие может быть достигнуто путем выбора "Включить параметры безопасности ClickOnce" (поскольку он не может быть "снят" во время публикации, как указано), а затем выбрав "Это приложение с частичным доверием". "Местная интрасеть" будет автоматически выбрана в раскрывающемся меню, которое идеально подходит.

Сохраните изменения, опубликуйте приложение, сделанные лыжи.:-) Фрагмент настроек безопасности

Ответ 8

Вот фрагмент кода для 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"})

EDIT: Но если вы развертываете таким образом, некоторые AV-программы блокируют ваш код.

Ответ 9

только

Imports System.security

и U не получит никакой ошибки, и ваше приложение будет запущено как admin