0

我的帐户具有管理权限。我使用 powershell 在 Windows 7 Enterprise VM 上访问 WMI,如下所示:

 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# 程序的情况下为具有管理权限的用户运行吗?

4

2 回答 2

0

您可以通过编辑清单(与您的 C# 可执行文件位于同一目录中的 XML 文件)来强制 UAC 提示,而无需显式“以管理员身份运行” 。

有关“如何强制我的 .NET 应用程序在 Windows 7 上以管理员身份运行?”,请参阅 StackOverflow 答案。.

于 2012-12-17T18:13:03.580 回答
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;
        }
于 2012-12-17T18:18:18.993 回答