Tôi biết điều này là cũ nhưng tôi tình cờ xem qua nó để tìm câu trả lời. Trong trường hợp của tôi, tôi đang sử dụng chức năng xuất bản và tôi cần tiếp tục sử dụng nó. Tôi cũng cần quyền truy cập vào khả năng quản trị viên. Vì vậy, vì lý do đó, không có câu trả lời nào ở trên phù hợp với tôi.
Tôi đã thêm một phương thức vào đầu ứng dụng của mình để kiểm tra xem nó có đang được chạy với tư cách quản trị viên hay không và nếu không, hãy khởi chạy lại chính nó với tư cách quản trị viên. Để làm điều này, bạn cần thêm các tài liệu tham khảo sau.
using System;
using System.Diagnostics;
using System.Reflection;
using System.Security.Principal;
Sau đó, bạn sẽ cần đặt nó ở nơi nào đó mà phương thức chính của bạn có thể truy cập thuận tiện. Tôi đang sử dụng WPF vì vậy tôi đã thêm nó vào MainWindow.xaml.cs nhưng bạn có thể thêm nó vào bất kỳ đâu sớm trong mã của mình. Chỉ cần nhớ thêm "static" vào các phương thức này nếu bạn cần.
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;
}
}
Cuối cùng, khi bắt đầu chương trình của bạn, hãy thêm một tham chiếu đến phương thức. Trong trường hợp của tôi, tôi đã thêm nó vào MainWindow nhưng cũng thêm nó vào Main hoạt động.
public MainWindow()
{
InitializeComponent();
AdminRelauncher(); //This is the only important line here, add it to a place it gets run early on.
}
Hi vọng điêu nay co ich!
requireAdministrator
quyền và ClickOnce bắt đầu phàn nàn rằng nó không hỗ trợrequireAdministrator
. Vấn đề phải cực kỳ rõ ràng. ClickOnce nhận thấy nhu cầu nâng cao trong tệp kê khai của bạn (trở thành một phần của ứng dụng của bạn). Tôi không chắc chắn những gì bạn càng cần ở đây ...