2010-08-30 64 views
24

如何強制執行我的程序C#Winforms程序以管理員身份在任何計算機上運行?和任何類型的操作系統?如何強制我的C#Winforms程序以管理員身份在任何計算機上運行?

我需要編寫代碼解決方案(任何示例代碼將是極好的)

在此先感謝

+0

的可能的複製[如何強制我的.NET應用程序以管理員身份運行?](http://stackoverflow.com/questions/2818179/how-to-force-my-net-application-to-run-as - 管理員) – amens 2016-05-27 07:51:32

回答

43

您可以嵌入此清單到應用程序中。

<?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

完整的步驟,包括如何在VS中添加清單文件http://philippsen.wordpress.com/tag/requestedexecutionlevel-manifest/ – 2014-09-30 00:49:54

10

以下是以admin身份運行應用程序的示例代碼。

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 

設置ProcessStartInfo.Verb爲「運行方式」會讓它以管理員身份運行。下面是相關FAQ

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

+1

我想OP是要求如何強制他的應用程序始終與管理員權限下而不是如何從管理員 – 2010-08-30 08:25:24

+0

以ac#應用程序的身份運行任何應用程序,導致我的應用程序崩潰。 – CodeIt 2016-06-03 17:07:02

2

答案顯然是指向清單文件添加到C#項目,並添加以下行:

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

但是,相當非正統的方法也可以考慮。我們知道註冊表訪問需要管理員權限。因此,如果您有一個包含註冊表寫入權限的函數,那麼如果您不以管理員身份運行該程序,該函數將拋出System.Security.SecurityException。這意味着你必須在程序開始時調用這個函數。如果拋出此異常,則可以通知用戶以管理員身份運行程序並關閉程序。

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); 
    } 
} 

這裏,線rk = rk.OpenSubKey(registryPath, true)true告訴它需要在註冊表寫入訪問程序。

相關問題