プロが教えるわが家の防犯対策術!

いつもお世話になっています。
PC内のドライブとシリアルナンバーを取得するツールを作成していますが
「COMExceptionはハンドルされませんでした。」というエラーが出て
とまってしまいます。
VisualBasic2008EE初心者でエラーの内容がわかりません。
どなたかお分かりの方おりましたらご教授のほどよろしくお願いします。
'ここから
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim DInfo As IO.DriveInfo
Dim DType As IO.DriveType
Dim Drv As String
Dim Sir As String
ListBox1.Items.Clear()
For Each DInfo In System.IO.DriveInfo.GetDrives
DType = DInfo.DriveType
Drv = DInfo.Name.Substring(0, 1)
Sir = ""
Sir = Get_Sir(Drv)
ListBox1.Items.Add(DInfo.Name & ControlChars.Tab & DType.ToString & ControlChars.Tab & Sir)
Next
End Sub
Private Function Get_Sir(ByVal Drv As String)
Dim FSO = CreateObject("Scripting.FileSystemObject")
Return FSO.GetDrive(Drv).SerialNumber 'ここでエラーになってしまいます。
System.Runtime.InteropServices.Marshal.ReleaseComObject(FSO)
End Function
End Class
'ここまで

A 回答 (2件)

前回、これがらみで回答しましたが



>System.Runtime.InteropServices.Marshal.ReleaseComObject(FSO)

この行通りませんね(直前の行で Return している為)。FileSystemObjectのインスタンスがリークします。
また、前回回答では修正版を載せてますので、そっちを参照ください。
    • good
    • 1
この回答へのお礼

edp3142さん、こんにちは

またしても助けていただきありがとうございました。
おかげさまで解決できました。

今後ともよろしくお願い致します。

'こんな感じにできあがりました。
Private Function Get_Sir(ByVal Drv As String)
Dim FSO = CreateObject("Scripting.FileSystemObject")
Dim DriveObject = FSO.GetDrive(Drv)
Try
Return DriveObject.SerialNumber
System.Runtime.InteropServices.Marshal.ReleaseComObject(DriveObject)
System.Runtime.InteropServices.Marshal.ReleaseComObject(FSO)
Catch ex As Exception
Return "(・・?"
End Try
End Function

お礼日時:2008/09/02 13:33

Drvの値に問題があってGetDriveでエラーになってるんじゃないでしょうか?



tyy~catchしていないのでそのままエラーが垂れ流されているのでしょう。

参考URL:http://officetanaka.net/excel/vba/filesystemobje …
    • good
    • 0
この回答へのお礼

ProKaseifuさん
こんにちは
vb.netにはtry~catchなる
便利な機能があるのですね。
勉強になりました。
これからもよろしくお願い致します(*^^)v。

お礼日時:2008/09/02 13:36

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!