質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

1回答

3466閲覧

RegistryKey.OpenRemoteBaseKeyが使えなくなった

morinokuma0621

総合スコア81

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2014/09/11 01:51

VS2008 C#で作っています。社内PCのOSバージョンやコンピュータ名を取得しようと、次のようなコードを含むツールを使用していました。ipAddressには「192.168.100.200」のように、IPアドレスが流れてきます。

lang

1public string GetOsVersion(string ipAddress) 2{ 3 try 4 { 5 using (var reg = RegistryKey.OpenRemoteBaseKey(RegistryHive.LocalMachine, ipAddress)) 6 using (var key = reg.OpenSubKey(@"Software\Microsoft\Windows NT\CurrentVersion\")) 7 { return string.Format(key.GetValue("ProductName").ToString()); } 8 } 9 catch 10 { return "不明"; } 11}

今までこれで問題なく使えていましたが、ある時からこの機能が使えなくなっていたことに気付きました。たまにしか使わないため、どの時点でこうなったのかわかりませんが、1つめのusingのところでcatchが入り、すべての端末が不明となって出てきてしまいます。

この「RegistryKey.OpenRemoteBaseKey」が使えなくなった理由は何が考えられるでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

デバッグが可能でしたら、catchの箇所でどんなエラー(例外)が発生しているのかを出力させてみれば、何か分かるかもしれません。

例外を出力させる例:

lang

1catch (Exception e) 2{ 3 Console.WriteLine("error: {0}", e); 4} 5return "不明";

投稿2014/09/11 02:15

argius

総合スコア9390

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

morinokuma0621

2014/09/11 03:45

ご返答ありがとうございます。こういうやり方があったのですね。調べてみましたら、「ネットワークパスが見つかりません」というエラーが出ました。ただ、開発環境の隣にある同じセグメントのPCでこのエラーが出ました。もちろんPINGも通ってます。 ネットワーク環境は以前からは変わりましたが、隣のPCに対してもこのエラーが出るのは解せないところがあります。RegistryKey.OpenRemoteBaseKeyを使うための必須条件のようなものが何かあったりしませんでしょうか?
argius

2014/09/11 04:44

ネットワーク環境が変わったということですが、実行されているPCと隣のPCは全く変わっていないのでしょうか。 ネットワークのセキュリティー設定によっては、Windowsリモートアクセスが制限されたりしている可能性もあるかも知れません。 もう一点、MSDNにRegistryKey.OpenRemoteBaseKeyの例外リストが有ります。度のエラーが出ているか分かりますか? [RegistryKey.OpenRemoteBaseKey メソッド (Microsoft.Win32)](http://msdn.microsoft.com/ja-jp/library/8zha3xws(v=vs.90).aspx)
morinokuma0621

2014/09/15 03:19

コメントありがとうございます。 実行しているPCと隣のPCは全く同じPCを使っています。 普段リモートアクセスで隣のPCを操作していますので、 リモートアクセスの制限はありません。 例外リストについてですが、見方がよくわかりませんが、 エラー発生時には「IOException」の項目に 「ネットワークパスが見つかりません」と書かれています。 よろしくお願いいたします。
argius

2014/09/15 04:22

MSDNをもう一度読んでみたところ、「リモート レジストリ サービスを実行している必要があります。」という記述がありました。 リモートPCのサービス"Remote Registry"は「開始」になっておりますでしょうか。 こちらでも、サービスを停止した状態でIOException「ネットワークパスが見つかりません」が発生することを確認しました。
morinokuma0621

2014/09/15 05:57

何度もありがとうございます。「Remote Registry」が手動で開始になっていませんでしたので、開始にしてテストしましたところ、マシン名を取得してくることができました。本当にご尽力くださりありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問