ฉันรู้ว่ามันเก่า แต่ฉันก็เจอมันเพื่อหาคำตอบ ในกรณีของฉันฉันใช้ฟังก์ชันการเผยแพร่และฉันจำเป็นต้องใช้มันต่อไป ฉันต้องการเข้าถึงความสามารถของผู้ดูแลระบบด้วย ด้วยเหตุนี้คำตอบข้างต้นจึงไม่เหมาะกับฉัน
ฉันลงเอยด้วยการเพิ่มวิธีการในการเริ่มต้นแอปพลิเคชันของฉันที่ตรวจสอบว่ามีการเรียกใช้ในฐานะผู้ดูแลระบบหรือไม่และหากไม่เป็นเช่นนั้นให้เปิดตัวเองใหม่ในฐานะผู้ดูแลระบบ ในการดำเนินการนี้คุณต้องเพิ่มการอ้างอิงต่อไปนี้
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();
}
หวังว่านี่จะช่วยได้!
requireAdministrator
สิทธิ์และClickOncerequireAdministrator
เริ่มบ่นว่ามันไม่ได้รับการสนับสนุน ปัญหาควรมีความชัดเจนอย่างยิ่ง ClickOnce เห็นความจำเป็นในการยกระดับในรายการของคุณ (ซึ่งกลายเป็นส่วนหนึ่งของแอปพลิเคชันของคุณ) ฉันไม่แน่ใจว่าคุณต้องการอะไรอีกที่นี่ ...