2010-08-30 29 views
24

Làm cách nào để bắt buộc chương trình C# Winforms chạy với tư cách là quản trị viên trên bất kỳ máy tính nào? và bất kỳ loại hệ điều hành nào?Làm thế nào để buộc chương trình C# Winforms của tôi chạy với tư cách là quản trị viên trên bất kỳ máy tính nào?

tôi cần giải pháp mã (bất kỳ mẫu mã sẽ xuất sắc)

Cảm ơn trước

+0

Bản sao có thể có của [Cách buộc ứng dụng .NET của tôi chạy với tư cách quản trị viên?] (Http://stackoverflow.com/questions/2818179/how-to-force-my-net-application-to-run-as -administrator) – amens

Trả lời

43

Bạn có thể nhúng manifest này vào ứng dụng của bạn.

<?xml version="1.0" encoding="utf-8" ?> 
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <assemblyIdentity version="1.0.0.0" name="MyApplication" /> 
    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2"> 
     <security> 
      <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3"> 
       <requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> 
      </requestedPrivileges> 
     </security> 
    </trustInfo> 
</asmv1:assembly> 
+13

để biết các bước đầy đủ bao gồm cách thêm tệp kê khai trong VS http://philippsen.wordpress.com/tag/requestedexecutionlevel-manifest/ –

10

Đây là mã mẫu để chạy ứng dụng của bạn với tư cách quản trị viên.

ProcessStartInfo proc = new ProcessStartInfo(); 
proc.UseShellExecute = true; 
proc.WorkingDirectory = Environment.CurrentDirectory; 
proc.FileName = Application.ExecutablePath; 
proc.Verb = "runas"; 
try 
{ 
    Process.Start(proc); 
} 
catch 
{ 
    // The user refused the elevation. 
    // Do nothing and return directly ... 
    return; 
} 
Application.Exit(); // Quit itself 

Đặt ProcessStartInfo.Verb để “runas” sẽ để cho nó chạy như admin. Đây là câu hỏi thường gặp liên quan

http://social.msdn.microsoft.com/Forums/en-US/winforms/thread/28f84724-af3e-4fa1-bd86-b0d1499eaefa#x_FAQAnswer91

+1

Tôi nghĩ OP đang yêu cầu cách buộc ứng dụng của anh ấy luôn hoạt động với quản trị viên không phải cách chạy bất kỳ ứng dụng nào từ trong ứng dụng aC# với tư cách quản trị viên –

+0

điều này khiến ứng dụng của tôi gặp sự cố .. – CodeIt

2

Câu trả lời hiển nhiên là thêm một file manifest cho dự án C# và thêm dòng sau:

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> 

Nhưng, một cách tiếp cận khá chính thống cũng có thể được thực hiện. Chúng tôi biết rằng quyền truy cập đăng ký yêu cầu đặc quyền của quản trị viên. Vì vậy, nếu bạn có một hàm có chứa quyền ghi đăng ký, hàm sẽ ném một System.Security.SecurityException nếu bạn không chạy chương trình với tư cách quản trị viên. Nó được ngụ ý rằng bạn phải gọi hàm này ở đầu chương trình. Nếu ngoại lệ này được ném, bạn có thể thông báo cho người dùng để chạy chương trình với tư cách quản trị viên và đóng chương trình.

public void enforceAdminPrivilegesWorkaround() 
{ 
    RegistryKey rk; 
    string registryPath = @"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\"; 

    try 
    { 
     if(Environment.Is64BitOperatingSystem) 
     { 
      rk = RegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.LocalMachine, RegistryView.Registry64); 
     } 
     else 
     { 
      rk = RegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.LocalMachine, RegistryView.Registry32); 
     } 

     rk = rk.OpenSubKey(registryPath, true); 
    } 
    catch(System.Security.SecurityException ex) 
    { 
     MessageBox.Show("Please run as administrator"); 
     System.Environment.Exit(1); 
    } 
    catch(Exception e) 
    { 
     MessageBox.Show(e.Message); 
    } 
} 

Ở đây, true phù rk = rk.OpenSubKey(registryPath, true) nói với chương trình mà nó cần ghi vào sổ đăng ký.

Các vấn đề liên quan