いつもお世話になっています。
ネットワーク上のクライアント情報を集めるアプリを作っています。
WMIやAPIで情報を取得しているのですが、20台に1台くらい10秒ほどかかって処理が失敗します。しかも待っている間は応答無しになってしまいます。
DoEventsを入れてタイマーで監視をし、タイムアウトするようにはしているのですが、応答無しの間はタイムアウトも効きません。これをタイムアウトにする方法はないでしょうか?
もうひとつ質問なんですが、クライアントのOS、SPのバージョンを取得したいのですが、GetVersionExで取得できるかと思いますが、いくつかサンプルをみましたが、クライアントを指定しているものは見当たりませんでした。
どうすればリモート端末の情報を取得できるでしょうか?
開発環境はvisual basic 6.0 です。
各クライアントの情報を捕らえるアプリと、それらの結果を収集して画面に表示するアプリを、
それぞれ別プロセスとして起動するというのはどうでしょう。
で、それらの VB アプリ間では、たとえば DDE (LinkPoke メソッド等)によって
情報を交換するように実装する、と。問題のタイムアウトに関しては、
LinkTimeout プロパティが使えるかも知れません。
さもなくば、クライアント情報を捕らえるアプリが、それらをログとして
ファイル等に書き溜めるようにしておき、画面表示用のアプリは、それらの
ファイルを定期的に読み込みなおすような仕組みにしてみるというのも手かも。
> クライアントのOS、SPのバージョンを取得したいのですが
Win32_OperatingSystem クラスを使うとか。
http://www.anchorsystems.co.jp/anchor/ashp/netmon/samples/wmi_os.html#Win32_OperatingSystem.htm
Dim TargetPC As String
Dim User As String
Dim Password As String
' :
' :
Dim OS As Object
For Each OS In CreateObject("WbemScripting.SWbemLocator") _
.ConnectServer(TargetPC, , User, Password) _
.InstancesOf("Win32_OperatingSystem")
Debug.Print TargetPC
Debug.Print " OS:="; OS.Caption
'Debug.Print " SP:="; OS.CSDVersion
Debug.Print " SP:="; OS.ServicePackMajorVersion;
Debug.Print "."; OS.ServicePackMinorVersion
Debug.Print " Plus:="; OS.PlusVersionNumber
Next
回答ありがとうございます。
LinkTimeoutは純粋にデータ受け渡しのタイムアウトじゃないかなと思うんですが。timeoutの時間が過ぎると処理を終わらせる分けではないような気がします。
Aというアプリで端末一覧を取得→Bに1台を渡す→Bで情報収集→Bから結果をAに。。。という流れですよね?
OSのバージョンはうまくいきそうです。
ありがとうございました。
ツイート | ![]() |