Saya tahu ini sudah tua tetapi saya sengaja menemukannya untuk mencari jawaban. Dalam kasus saya, saya menggunakan fungsi terbitkan dan saya harus tetap menggunakannya. Saya juga membutuhkan akses ke kemampuan admin. Jadi karena alasan itu, tidak ada jawaban di atas yang berhasil untuk saya.
Saya akhirnya menambahkan metode ke awal aplikasi saya yang memeriksa apakah itu dijalankan sebagai administrator dan jika tidak, luncurkan kembali sendiri sebagai admin. Untuk melakukan ini, Anda perlu menambahkan referensi berikut.
using System;
using System.Diagnostics;
using System.Reflection;
using System.Security.Principal;
Kemudian Anda harus meletakkan ini di suatu tempat yang dapat diakses oleh metode utama Anda. Saya menggunakan WPF jadi saya menambahkannya ke MainWindow.xaml.cs tetapi Anda dapat menambahkannya di mana saja di awal kode Anda. Ingatlah untuk menambahkan "statis" ke metode ini jika Anda membutuhkannya.
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;
}
}
Terakhir, di awal program Anda, tambahkan referensi ke metode tersebut. Dalam kasus saya, saya menambahkannya ke MainWindow tetapi menambahkannya ke pekerjaan Utama juga.
public MainWindow()
{
InitializeComponent();
AdminRelauncher();
}
Semoga ini membantu!
requireAdministrator
izin yang meminta manifes dan ClickOnce mulai mengeluh bahwa itu tidak mendukungrequireAdministrator
. Masalahnya harus sangat jelas. ClickOnce melihat kebutuhan akan elevasi di manifes Anda (yang menjadi bagian dari aplikasi Anda). Saya tidak yakin apa lagi yang Anda butuhkan di sini ...