C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: SerialPort.GetPortNames()で例外発生


(過去ログ 116 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■68346 / inTopicNo.1)  SerialPort.GetPortNames()で例外発生
  
□投稿者/ beer (1回)-(2013/10/15(Tue) 10:03:06)

分類:[.NET 全般] 

よろしくお願いします。

VS2010で、C#、.NET4を使用しています。

SerialPort.GetPortNames()で下記の例外が稀に発生します。
どんな理由でどんな対策をしたらよいか、わかりましたら教えていただけ
ないでしょうか。


[Message]
データはこれ以上ありません。

[Source]
mscorlib
[StackTrace]
場所 Microsoft.Win32.RegistryKey.Win32Error(Int32 errorCode, String str)
場所 Microsoft.Win32.RegistryKey.GetValueNames()
場所 System.IO.Ports.SerialPort.GetPortNames()
場所 [作成したソフトのSerialPort.GetPortNames()コール場所]
[TargetSite]
Void Win32Error(Int32, System.String)

引用返信 編集キー/
■68348 / inTopicNo.2)  Re[1]: SerialPort.GetPortNames()で例外発生
□投稿者/ オショウ (92回)-(2013/10/15(Tue) 14:03:54)
> SerialPort.GetPortNames()で下記の例外が稀に発生します。

  一般的には、エラーが発生しない箇所だと思いますが・・・

  仮にそのPCにシリアルポートが一切無い状態であった場合
  GetPortNames()が返す配列は、null になるはず。と思って
  ます。

  GetPortNames()で、例外が発生するということは、システム
  的にどこか壊れていないかどうか。

  デバイスが正しく認識され、ドライバーがインストールでき
  ているのかどうか。

※ デバイスの認識で、ドライバーのインストールがあ失敗して
  いるか、ファイルが壊れていた場合、例外が出るかもしれま
  せん。(レジストリの破損も含め)

以上。
引用返信 編集キー/
■68349 / inTopicNo.3)  Re[1]: SerialPort.GetPortNames()で例外発生
□投稿者/ 魔界の仮面弁士 (371回)-(2013/10/15(Tue) 14:38:54)
No68346 (beer さん) に返信
> SerialPort.GetPortNames()で下記の例外が稀に発生します。
「稀」ということは、再現性が低いものと思われますが、それは
特定の環境だけで発生するのでしょうか。複数の環境で起きるのでしょうか。

他にも、同様の事例が報告されていましたが、回答に行き着いた物は見当たりませんでした。
http://social.msdn.microsoft.com/forums/en-US/dd268f41-7a70-46d6-aca7-a21fa7b39634


> どんな理由でどんな対策をしたらよいか、わかりましたら教えていただけ
> ないでしょうか。
このメソッド自体は、レジストリの
 HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM
の下を列挙するだけのようですね(見つからない場合は、要素数 0 の配列を返す)。

当方には SERIALCOMM のキーがありませんでしたが、キーを作成した上で
適当な REG_SZ 型のエントリーを用意したら、GetPortNames からそれらが返されました。
(REG_SZ 以外の値を用意すると、今回の物とは別のエラーになりましたが)


もしかしたら、レジストリキーへのアクセスに失敗しているのかも知れません。
(権限が不足している、あるいはセキュリティソフト等によってアクセスがブロックされているなど)
管理者権限かつ FullTrust のアプリから呼び出しても症状は同じでしょうか?
引用返信 編集キー/
■68350 / inTopicNo.4)  Re[2]: SerialPort.GetPortNames()で例外発生
□投稿者/ オショウ (93回)-(2013/10/15(Tue) 15:09:39)
No68349 (魔界の仮面弁士 さん) に返信

> もしかしたら、レジストリキーへのアクセスに失敗しているのかも知れません。
> (権限が不足している、あるいはセキュリティソフト等によってアクセスがブロックされているなど)
> 管理者権限かつ FullTrust のアプリから呼び出しても症状は同じでしょうか?

  権限によって発生する・・・と言うのは、違う意味で納得のいく話ですが
  デバイスとして認識されていても、そのレジストリ部分に正しくポート情
  報を書かない。と言う行儀の悪いメーカーのものもありました。

  ので、正しくポート情報を得るには、CreateFileで、COM1〜COM???までを
  オープンしてみて、開ければ存在するという判断機能を作ってました。

※ COMのポート数は、古くは、256個と規定されていましたが、後、1000個以
  上デバイスとして動作できるものができたので、ドライバー次第と言う事
  ですかネ〜
  一般PCでは、20個も見れば十分かと思いますが。

以上。参考まで
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -