0

私のアカウントには管理者権限があります。次のように、PowerShellを使用してWindows 7EnterpriseVMで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プロンプトを強制できます。

「Windows7で.NETアプリを管理者として強制的に実行する方法」については、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 に答える