Итак, я писал приложение, требующее доступа к реестру. Я не касался каких-либо настроек сборки, желая, чтобы все работало, прежде чем я добавляю другие штрихи, такие как описание или имя.
Совершенно неожиданно я получаю ошибку, которая никуда не делась. ClickOnce does not support the request execution level 'requireAdministrator'.
Я не касался ClickOnce в этом приложении. Все, что я сделал, это включил файл манифеста, запрашивающий эти разрешения.
Моя проблема сейчас в том, что эта ошибка не исчезнет, и я не могу скомпилировать свою программу. Есть совет, что делать? (Примечание: я иду спать, поэтому проверю завтра днем).
95
requireAdministrator
разрешения, и ClickOnce начал жаловаться, что он не поддерживаетrequireAdministrator
. Проблема должна быть предельно ясной. ClickOnce видит необходимость повышения прав в вашем манифесте (который становится частью вашего приложения). Я не уверен, что еще вам нужно здесь ...Ответы:
Изменить: этот комментарий тоже дает хороший ответ.
Оригинал:
Оказывается, на вкладке «Безопасность» был установлен флажок «Включить параметры безопасности ClickOnce». Хотя я не проверял. В любом случае, снятие флажка остановило ClickOnce, чтобы выдавать мне ошибки. Потребовалось время, чтобы найти ...
источник
AppData
папку. Повышение привилегий приведет к переключению пользовательского контекста, в котором приложение ClickOnce даже не установлено.Я знаю, что это старый вопрос, но я пришел сюда два года спустя, поэтому:
Вы можете отключить 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" />
источник
requireAdministrator
для записи в реестр требуется привилегия, поэтому это будет требованием.asInvoke
У меня та же проблема, которую я решаю, сняв флажок « Включить параметры безопасности ClickOnce». Чтобы найти этот параметр в Visual Studio, щелкните правой кнопкой мыши свой проект ==> свойства ==> Выберите Безопасность ==> Включить параметры безопасности ClickOnce (этот параметр был уже проверено, поэтому я снял его, и моя проблема решена).
источник
Вот фрагмент кода для 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-программы блокируют ваш код.
источник
Для тех, кто снимает флажок «Включить настройки безопасности 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!
источник
Для всех, кто сталкивался с этим, я подумал, что внесу свой вклад в то, что в итоге сработало для меня.
Да, параметр «Включить параметры безопасности ClickOnce» автоматически проверяется повторно, если вы его снимаете, когда вы выполняете « Сборка»> «Опубликовать» .
Мне не нужно «публиковать» - это простой переносимый .exe, который создает запланированные задачи для моих пользователей, и мне нужно было убедиться, что он повышен, даже когда вы вошли в систему как администратор.
Итак, я просто взял свой последний .exe из \ bin \ Release и это то, что развернулось в системах моих клиентов.
Работает так, как ожидалось - то есть когда я помещаю его в систему с включенным UAC / с максимальным значением, на .exe есть «щит», и когда я запускаю его, даже когда я вошел в систему как администратор, он поднимается, и я получаю приглашение UAC.
Мое маленькое приложение-планировщик задач теперь может создавать задачи без появления ошибки «Доступ запрещен» (которую раньше можно было обойти, только щелкнув правой кнопкой мыши файл .exe и выбрав «Запуск от имени администратора»).
источник
только
и U не получит ошибки, и ваше приложение будет запущено от имени администратора
источник