解決済みの質問
いつもお世話になっています。
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
'ここまで
投稿日時 - 2008-09-01 21:06:08
前回、これがらみで回答しましたが
>System.Runtime.InteropServices.Marshal.ReleaseComObject(FSO)
この行通りませんね(直前の行で Return している為)。FileSystemObjectのインスタンスがリークします。
また、前回回答では修正版を載せてますので、そっちを参照ください。
投稿日時 - 2008-09-02 12:33:34
お礼
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:18
0人が「このQ&Aが役に立った」と投票しています
Drvの値に問題があってGetDriveでエラーになってるんじゃないでしょうか?
tyy~catchしていないのでそのままエラーが垂れ流されているのでしょう。
参考URL:http://officetanaka.net/excel/vba/filesystemobject/filesystemobject.htm#GetDrive
投稿日時 - 2008-09-02 10:09:44
お礼
ProKaseifuさん
こんにちは
vb.netにはtry~catchなる
便利な機能があるのですね。
勉強になりました。
これからもよろしくお願い致します(*^^)v。
投稿日時 - 2008-09-02 13:36:15
OKWaveのオススメ
おすすめリンク