Я знаю, що це старе, але я натрапив на нього, шукаючи відповіді. У моєму випадку я використовую функцію публікації, і мені потрібно продовжувати користуватися нею. Мені також потрібен доступ до можливостей адміністратора. Тож із цієї причини жодна з наведених відповідей не спрацювала для мене.
У підсумку я додав метод на самому початку моєї програми, який перевіряє, чи запускається він як адміністратор, а якщо ні, перезапустити себе як адміністратор. Для цього вам потрібно додати такі посилання.
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 почав скаржитися, що він не підтримуєrequireAdministrator
. Проблема повинна бути гранично зрозумілою. ClickOnce бачить необхідність підвищення в вашому маніфесті (який стає частиною вашої програми). Я не впевнений, що вам тут ще потрібно ...