2012-12-17 65 views
0

我的帳戶具有管理權限。 我訪問WMI在Windows 7企業版虛擬機使用PowerShell如下:訪問Windows PowerShell中的WMI Windows 7企業中的C#程序

Get-WmiObject -Namespace root\SecurityCenter2 -Class AntiVirusProduct -ComputerName $computername 

,並用C#如下:

 string computer = Environment.MachineName; 
     string wmipath = @"\\" + computer + @"\root\SecurityCenter2"; 
     try 
     { 
      ManagementObjectSearcher searcher = new ManagementObjectSearcher(wmipath, 
       "SELECT * FROM AntivirusProduct"); 
      ManagementObjectCollection instances = searcher.Get(); 
      //MessageBox.Show(instances.Count.ToString()); 
      foreach (ManagementObject queryObj in instances) 
      { 
       return queryObj[type].ToString(); 
      } 
     } 

     catch (Exception e) 
     { 
      MessageBox.Show(e.Message); 
     } 

然而,在PowerShell中的代碼工作始終,但在C#代碼只能如果我明確地以管理員身份運行該程序。我可以向C#代碼添加任何東西,以便它可以爲具有管理權限的用戶運行,而無需以管理員身份明確啓動C#程序?

+0

不,你不能。隨着U7在W7中激活,您的「管理權限」。只有在需要權限時才允許您在UAC彈出窗口上回答YES。如果您的應用程序需要管理權限,則需要使用「以管理員身份運行」啓動應用程序,或者在軟件中創建一個檢查以觸發UAC-popup。請記住,您可以通過快捷方式進入屬性 - >快捷方式 - >前進 - >始終管理以始終以管理員身份運行。最後一個選項是ofc。關閉UAC,但在與工作相關時不受歡迎:)如果我錯了,請糾正我的錯誤。 –

+0

有趣的是,在另一臺機器上,相同的代碼不需要以管理員身份運行,我稍微困惑.... – Greg

回答

0

通常當我的應用程序只能從機器管理員運行我用 這種方法來驗證管理權:

public static bool HasAdministrativeRight() 
     { 
      WindowsPrincipal principal = new WindowsPrincipal(WindowsIdentity.GetCurrent()); 
      return principal.IsInRole(WindowsBuiltInRole.Administrator); 
     } 

在我的代碼(窗體或控制檯應用程序)

 if (!HasAdministrativeRight()) 
     { 
      if (RunElevated(""))     
      { 
      Application.Exit(); 
      } 
     } 
主要部分

以高架方式運行的代碼:

private static bool RunElevated(string args) 
     { 
      ProcessStartInfo processInfo = new ProcessStartInfo(); 
      processInfo.Verb = "runas"; 
      processInfo.FileName = Application.ExecutablePath; 
      processInfo.Arguments = args; 
      try 
      { 
       Process.Start(processInfo); 
       return true; 
      } 
      catch (Exception) 
      { 
       //Do nothing. Probably the user canceled the UAC window 
      } 
      return false; 
     } 
相關問題