2011-07-15 16 views
3

リモートサーバー上で実行されているWindowsサービスを照会し、マシン名、サービス名、およびステータスをデータベースに書き込むアプリケーションを使用しています。C#Windowsサービスの照会

しかし、スタートアップの種類(自動、手動、無効)も取得したいと考えています。私はスタートアップタイプのオプションがないサービスコントローラーを使用していたので、管理クラスを使用して調べ始めました。このクラスは、必要なものがすべてそろっているように見えますが、私はそれをリモートサーバに対してどのように使用するのか分かりません。サービスコントローラのために、私はこれをやっていた:

ServiceController[] services = ServiceController.GetServices(serverIP); 

foreach (ServiceController service in services) 
{ 
    var machine = service.MachineName; 
    var displayName = service.DisplayName; 
    var status = service.Status; 
} 

は私が管理クラスのためにこれを試してみました:

ManagementClass class1 = new ManagementClass(serverIP + "\\" + "Win32_Service"); 

foreach (ManagementObject ob in class1.GetInstances()) 
{ 
    var machine = serverIP; 
    var displayName = ob.GetPropertyValue("Description"); 
    var name = ob.GetPropertyValue("PathName"); 
    var startMode = ob.GetPropertyValue("StartMode"); 
    var status = ob.GetPropertyValue("State"); 
} 

しかし、もちろん、それは動作しませんでした。誰でも管理クラスを使用してリモートマシンからサービスを取得する方法を知っていますか?または、サービスコントローラを使用してスタートアップの種類を取得する別の方法がありますか?

また、両方を組み合わせて、管理クラスのforeach文をサービスコントローラ内に配置しようとしましたが、無限ループに陥ってしまいました。

+0

(@ "\\" + serverIP + "\\ルート\\ cimv2:Win32_Service")これを行うと思います。サービス名のプロパティが見つからないので、私はテストを続けます。 – Matt

+0

あなたの修正は理にかなっています。あなたは常にリモートコンピュータを\\ computernameとして参照し、@記号C#のものがなければ単一のバックスラッシュをエスケープします。 – Andy

+0

誰かがサービス名のプロパティを知りたいのであれば、名前だけです。 – Matt

答えて

0

を支援働いた。これを管理クラスに追加してください。

(@"\\" + serverIP + "\\root\\cimv2:Win32_Service") 
1

あなたが探している情報は、WMIで入手できます。

PowerShellでPure C#よりもこのことを書く方がずっと簡単です。 WMIコードはC#(またはC++、またはVBScript)で非常に乱雑です。このスニペットは、コンピュータのリストからデータを取得する方法を示しています。 )、C#で埋め込むだけでSystem.Management.Automationを使用して、(PowerShell.Createを追加する。AddScript(...)。呼び出し()

$computerList = "a","b","c" 
Get-WmiObject -computerName $computerList -asjob 
    | Wait-job 
    | receive-job 
    | Select-Object DisplayName, Description, StartMode, State 

希望これは上記と同じコード、

+0

返信いただきありがとうございます。データベースのテーブルからサーバーを引き出すとどうなりますか?私はサーバーのIPをプルするSQLリーダーを作成しました。申し訳ありませんが私は例からそれを残しました。 – Matt

+0

それから、そのデータベースから$ computerListを読み込むだけです。 .NETのSqlClientクラスは、探しているものでなければなりません。 New-Objectを作成することができます(PowerShell + SQLのいくつかのWeb検索で正しいパスに送られます)。 –

関連する問題