4

私は次のコードを持っています

    private DataTable GetServices(string[] serviceNames)
    {
        DataTable dt = new DataTable("Services");
        dt.Columns.Add("MachineName", typeof(string));
        dt.Columns.Add("ServiceName", typeof(string));
        dt.Columns.Add("ServiceStatus", typeof(string));

        ServiceController[] services = ServiceController.GetServices();
        foreach (ServiceController scTemp in services)
        {
            if (serviceNames.Contains(scTemp.DisplayName))
            {

                dt.Rows.Add(scTemp.MachineName, scTemp.DisplayName, scTemp.Status);
            }
        }
        return dt;
    }

次を返します

MachineName、ServiceName、ServiceStatus
。、Adobe Flash Player Update Service、Stopped
。、Application Experience、Running
。、Application Layer Gateway Service、Stopped
。、Application Host Helper Service、Running

scTemp.MachineNameを返します.

どうすれば実際のコンピューター名を返すことができますか?

4

2 に答える 2

5

「。」ローカル コンピューターを示します。実際の MachineName を使用するには、Environment クラスのプロパティMachineNameを使用できます。

ServiceController の MachineName が "." を返す場合、問題を解決するには、カスタム マッピングを追加する必要があります。

if (scTemp.MachineName.Equals(".")) {
  dt.Rows.Add(Environment.MachineName, scTemp.DisplayName, scTemp.Status);
}
else {
  dt.Rows.Add(scTemp.MachineName, scTemp.DisplayName, scTemp.Status);
}
于 2012-06-05T07:19:25.877 に答える
3

MSDN から: ServiceController.MachineName - この ServiceController インスタンスに関連付けられたサービスを実行しているコンピューターの名前。デフォルトはローカル コンピューター (".") です。

Environment.MachineName を介してローカル コンピューター名を取得できます。

http://msdn.microsoft.com/en-us/library/system.environment.machinename(v=vs.71).aspx

于 2012-06-05T07:21:16.093 に答える