VB2002+WIN2000を使用。
リモート端末へのアクセス前に起動確認処理としてPINGを使い、電源OFF時の待ち時間を減らしたいと考えています。
○PINGの他に導通確認できる手軽なものがあるのでしたら教えてください。
PINGの処理はネットで検索した結果C#(1.1)のものでしたら発見できたため、それを利用しようと思っています。(サイトでもVBへの変換は簡単にできるとあったので^_^;)
自分なりに変換してみましたがエラーが発生してしまい原因/対応方が分かりません。
ぜひご教授下さい。よろしくお願いいたします。
(補足が必要であれば記述します。)
【元からの変更】
・引数はなしにし、固定にしました。
・Button1の処理に記述しました。
・参照設定でSystem.Managementを追加しました。
【エラー】
スレッド '<名前がありません>' (0x59c) はコード 0 (0x0) で終了しました。
'System.Management.ManagementException' のハンドルされていない例外が system.management.dll で発生しました。
追加情報 : 無効なクラスです
【予想】
searcherにGetがない? 対策が分からず…
----- 変更プログラム ------
Imports System
Imports System.Management
Dim arg As String
arg = "192.168.0.1"
'クエリ文字列の設定()
Dim searcher As ManagementObjectSearcher = New ManagementObjectSearcher()
searcher = New ManagementObjectSearcher("select * from Win32_PingStatus where address = '" & arg & "'")
' クエリ結果のとりだし
Dim mo As ManagementObject
'エラー箇所
For Each mo In searcher.Get
Dim i As Integer
' 結果のプロパティのチェックと状態の表示
If mo.Properties("StatusCode").Value = "" Or Convert.ToInt32(mo.Properties("StatusCode").Value) <> 0 Then
Console.WriteLine(arg + ":稼働していません")
Else
Console.WriteLine(arg + ":稼働中")
Console.WriteLine("IPAddress:" & mo.Properties("ProtocolAddress").Value)
Console.WriteLine("ResponseTime:" & mo.Properties("ResponseTime").Value)
End If
Next
Console.WriteLine("----------------")
------ 元プログラム(C#) ----------------------
using System;
using System.Management;
class PingExec
{
public static void Main(string[] args) {
if(args.Length > 0)
{
foreach(string arg in args)
{
// クエリ文字列の設定
ManagementObjectSearcher searcher
= new ManagementObjectSearcher(
"select * from Win32_PingStatus where address = '"
+ arg + "'");
// クエリ結果のとりだし
foreach( ManagementObject mo in searcher.Get() )
{
// 結果のプロパティのチェックと状態の表示
if(mo.Properties["StatusCode"].Value == null
|| Convert.ToInt32(mo.Properties["StatusCode"].Value)
!= 0)
{
Console.WriteLine(arg + ":稼働していません");
}
else
{
Console.WriteLine(arg + ":稼働中");
Console.WriteLine("IPAddress:"
+ mo.Properties["ProtocolAddress"].Value);
Console.WriteLine("ResponseTime:"
+ mo.Properties["ResponseTime"].Value);
}
}
Console.WriteLine("----------------");
}
}
}
}
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
.NET 3.5 Beta 2での検証を行いました。
.NET 1.1では行っておりませんのでご了承ください。[C#]
mo.Properties["StatusCode"].Value == null
[VB.NET]
mo.Properties("StatusCode").Value = ""
nullと空文字列(String型)は同じではなく,
比較できません。
で
VB.NETではnullではなくNothingを使います。
Nothingと比較する際,演算子として参照比較演算子Isを用います。
=だと実体が同じではないので,falseを返してしまうでしょう。
#色々うだうだ述べて間違ってたら恥ずかしいので削除
#でも、うちの場合InvalidCastExceptionが出たので違うかも
===========実際に動作したサンプル============
Imports System
Imports System.Management
Class Q3484121 'きちんとクラス名は書こう
Shared Sub Main 'Mainもきちんと書こう
Dim arg As String
arg = "127.0.0.1"
'クエリ文字列の設定()
Dim searcher As ManagementObjectSearcher = New ManagementObjectSearcher()
searcher = New ManagementObjectSearcher("select * from Win32_PingStatus where address = '" & arg & "'")
' クエリ結果のとりだし
Dim mo As ManagementObject
'エラー箇所
For Each mo In searcher.Get
' 結果のプロパティのチェックと状態の表示
'himajin100000は自信がないので演算子Orが優先されないように括弧で括ってる
If (mo.Properties("StatusCode").Value Is Nothing) Or (Convert.ToInt32(mo.Properties("StatusCode").Value) <> 0) Then
Console.WriteLine(arg + ":稼働していません")
Else
Console.WriteLine(arg + ":稼働中")
Console.WriteLine("IPAddress:" & mo.Properties("ProtocolAddress").Value)
Console.WriteLine("ResponseTime:" & mo.Properties("ResponseTime").Value)
End If
Next
Console.WriteLine("----------------")
End Sub
End Class
'.NET 2.0以降
'http://msdn2.microsoft.com/en-us/library/system. …
'その他,Process.Startでpingを実行(ぉ
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Visual Basic(VBA) このVBAでExcelアプリケーションを作成は必要ですか? 3 2023/07/19 21:13
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) 稀に1円合いません? Sheet1から金額と個数を貼り付ける下記コードで、金額を切り上げるコードを何 3 2022/09/05 15:11
- Excel(エクセル) B列に文字がはいったらA列に数字が入るマクロードを完成させたい 4 2023/04/21 01:58
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
実行時エラー 438になった時の...
-
VBSで変数の宣言はできないので...
-
エクセルエラー13型が一致しま...
-
ExcelVBA Range クラスの Page...
-
【Excel VBA】マクロをボタンに...
-
実行時エラー48発生時のDLL特定...
-
OLEDB.NETで接続できない
-
VBS実行時エラー オブジェクト...
-
excel vbaでvlooupの変数がわか...
-
マクロについて教えてください...
-
プロシージャ名の取得
-
EXCEL VBAマクロ中断でデバッグ...
-
VBAでのエラー
-
実行時エラー3001「引数が間違...
-
なぜエラーになるのでしょうか...
-
Excel2019 ワークシートのコピ...
-
vbaのvlookup関数エラー原因を...
-
なぜこんな初歩的なVBAのIf文で...
-
デバッグ時はOK、デバッグ無し...
-
Outlook.ApplicationをCreateOb...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
実行時エラー 438になった時の...
-
エクセルエラー13型が一致しま...
-
【Excel VBA】マクロをボタンに...
-
なぜこんな初歩的なVBAのIf文で...
-
VBAでのエラー
-
マクロについて教えてください...
-
ExcelVBA Range クラスの Page...
-
実行時エラー3001「引数が間違...
-
VBS実行時エラー オブジェクト...
-
VBAがブレークモードになっ...
-
OLEDB.NETで接続できない
-
プロシージャ名の取得
-
EXCEL VBAマクロ中断でデバッグ...
-
VBSで変数の宣言はできないので...
-
ADODB.Streamを使用してUTF-8を...
-
実行時エラー -'-2147417848
-
AccessVBAでExcelを起動し、罫...
-
VB6+SQL サーバー 2000 で 実行...
-
Outlook.ApplicationをCreateOb...
-
Application.ActiveInspectorで...
おすすめ情報