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

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

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

Re[14]: レジストリからの読み込み


(過去ログ 89 を表示中)

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

■53103 / inTopicNo.1)  レジストリからの読み込み
  
□投稿者/ しぃ (1回)-(2010/09/03(Fri) 10:51:59)

分類:[C#] 

はじめまして。

Visual Stdio 2005 C#でコーディングしています。
Windows Embedded CE 6.0を使用します。

早速質問ですが、
レジストリからあるキーの値のデータを取得したいです。
そのデータをFormのTextBoxに表示したいのですがうまくいきません。
Formが表示された時点で、TextBoxに表示されている形にしたいです。

下記のコーディングは
HKEY_LOCAL_MACHINE
- SOFTWARE
- Microsoft
- .NETFramework
このキーのInstallRootという名前の値のデータを取得しようとしています。

// 操作するレジストリ・キーの名前
string rKeyName = @"SOFTWARE\Microsoft\.NETFramework";
// 取得処理を行う対象となるレジストリの値の名前
string rGetValueName = "InstallRoot";

// レジストリの取得
try
{
// レジストリ・キーのパスを指定してレジストリを開く
RegistryKey rKey = Registry.LocalMachine.OpenSubKey(rKeyName);

// レジストリの値を取得
string location = (string)rKey.GetValue(rGetValueName);

// 開いたレジストリ・キーを閉じる
rKey.Close();

textbox1.Text = location;
}
catch (NullReferenceException)
{
// レジストリ・キーまたは値が存在しない
Console.WriteLine("レジストリ[" + rKeyName
+ "]の[" + rGetValueName + "]がありません!");
}

このコーディングだと、
エラーは出ないのですが、
TextBoxにデータが表示されません。
どこに原因があるのでしょうか?

また、記述する場所がわからず、
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent()
※ここ
}
}

※に記述してあります。
場所はあっているのでしょうか?

また、
textBox1_TextChanged()関数の中に
記述しても同じ結果になりました。

よろしくお願い致します。
引用返信 編集キー/
■53105 / inTopicNo.2)  Re[1]: レジストリからの読み込み
□投稿者/ マサヤ (136回)-(2010/09/03(Fri) 11:22:24)
記述場所は問題ありません。
そこで、権限とWindows CEを疑ってみました。

[Windows CE]
Windows CEでレジストリ読み込み
http://ja.w3support.net/index.php?db=so&id=57609

[レジストリ参照権限]
過去スレッド
http://bbs.wankuma.com/index.cgi?mode=al2&namber=38447&KLOG=66

ということで
// レジストリ・キーのパスを指定してレジストリを開く
RegistryKey rKey = Registry.LocalMachine.OpenSubKey(rKeyName);

// レジストリ・キーのパスを指定してレジストリを開く
RegistryKey rKey = Registry.LocalMachine.OpenSubKey(rKeyName, true);
でやってみたらいかがでしょうか?

引用返信 編集キー/
■53106 / inTopicNo.3)  Re[2]: レジストリからの読み込み
□投稿者/ しぃ (2回)-(2010/09/03(Fri) 11:42:57)
2010/09/03(Fri) 11:47:13 編集(投稿者)

No53105 (マサヤ さん) に返信
ありがとうございます。

> ということで
> // レジストリ・キーのパスを指定してレジストリを開く
> RegistryKey rKey = Registry.LocalMachine.OpenSubKey(rKeyName);
> を
> // レジストリ・キーのパスを指定してレジストリを開く
> RegistryKey rKey = Registry.LocalMachine.OpenSubKey(rKeyName, true);
> でやってみたらいかがでしょうか?
>
この方法で記述してみたのですが・・・だめでした・・・

今、値が存在しない場合を試してみましたが、
本来このエラーが表示されるはずですが
// レジストリ・キーまたは値が存在しない
Console.WriteLine("レジストリ[" + rKeyName
+ "]の[" + rGetValueName + "]がありません!");
}
エラーが表示されませんでした・・・。
引用返信 編集キー/
■53111 / inTopicNo.4)  Re[3]: レジストリからの読み込み
□投稿者/ しぃ (3回)-(2010/09/03(Fri) 14:25:41)
2010/09/03(Fri) 15:09:54 編集(投稿者)

> 今、値が存在しない場合を試してみましたが、
> 本来このエラーが表示されるはずですが
> // レジストリ・キーまたは値が存在しない
> Console.WriteLine("レジストリ[" + rKeyName
> + "]の[" + rGetValueName + "]がありません!");
> }
> エラーが表示されませんでした・・・。

エラーが表示されなかったのはConsole.WriteLineが
原因みたいです。
MessageBoxでは表示されるみたいでした・・・。

また、データの値が表示されなかったのは
アクセス権がないということらしいです・・・
プログラムの問題ではないみたいなので
ご迷惑おかけしました・・・。
引用返信 編集キー/
■53119 / inTopicNo.5)  Re[4]: レジストリからの読み込み
□投稿者/ しぃ (4回)-(2010/09/03(Fri) 15:12:20)
一度は解決済みにしたのですが・・・

Windows Embedded CE 6.0では
権限がないらしく読み込むことが出来ませんでした。
そこでPocket PC 2003 SE 四角エミュレータ
で実行してみました。
しかし、やはり読み込みは出来ませんでした。

何が原因なのかわかりません・・・
わかる方がおられましたらよろしくお願いいたします。
引用返信 編集キー/
■53121 / inTopicNo.6)  Re[5]: レジストリからの読み込み
□投稿者/ マサヤ (138回)-(2010/09/03(Fri) 15:26:53)
HKEY_CURRENT_USER以下に配置されたレジストリ情報も読み取れませんか?
引用返信 編集キー/
■53122 / inTopicNo.7)  Re[6]: レジストリからの読み込み
□投稿者/ しぃ (5回)-(2010/09/03(Fri) 15:39:46)
No53121 (マサヤ さん) に返信
ありがとうございます。

> HKEY_CURRENT_USER以下に配置されたレジストリ情報も読み取れませんか?

CURRENT_USER下、Control Panelにtestという名前の値を登録し
下記を実行してみましたが、
読み取れないらしく、TextBoxには表示されません・・・

// 操作するレジストリ・キーの名前
string KeyName = @"Control Panel";
// 取得処理を行う対象となるレジストリの値の名前
string GetValueName = "test";

// レジストリの取得
try
{
RegistryKey Key = Registry.CurrentUser.OpenSubKey(KeyName, true);
string data = (string)Key.GetValue(GetValueName);
textBox1.Text = data;

Key.Close();
}
catch (NullReferenceException)
{
// レジストリ・キーまたは値が存在しない
MessageBox.Show("レジストリ["+KeyName+"]の["+GetValueName+"]がありません!");
}
引用返信 編集キー/
■53124 / inTopicNo.8)  Re[7]: レジストリからの読み込み
□投稿者/ 魔界の仮面弁士 (1789回)-(2010/09/03(Fri) 15:47:48)
No53122 (しぃ さん) に返信
> CURRENT_USER下、Control Panelにtestという名前の値を登録し
> 下記を実行してみましたが、
> 読み取れないらしく、TextBoxには表示されません・・・

事前に、その textBox1 に別の値を入れておいた場合、
どのような動作になりますか?


(1) TextBox に、空の文字列がセットされてしまう。
(2) TextBox に、想定していない文字列がセットされてしまう。
(3) catch 句に書いた MessageBox が表示される。
(4) MessageBox は表示されず、TextBox の値も書き換わらない。
(5) catch 句に入らず、別の場所エラーが発生する。
(6) アプリが応答なしになる。
(7) その他。
引用返信 編集キー/
■53125 / inTopicNo.9)  Re[8]: レジストリからの読み込み
□投稿者/ しぃ (7回)-(2010/09/03(Fri) 15:53:59)
No53124 (魔界の仮面弁士 さん) に返信
ありがとうございます。

> 事前に、その textBox1 に別の値を入れておいた場合、
> どのような動作になりますか?

Formで、TextBoxのプロパティウィンドウで
aaaaaaaと入力しましたが、実行後は
TextBoxは空になりました。
引用返信 編集キー/
■53129 / inTopicNo.10)  Re[9]: レジストリからの読み込み
□投稿者/ 魔界の仮面弁士 (1790回)-(2010/09/03(Fri) 17:05:35)
手元に Windows Embedded CE 6.0 R1 環境は無いのですが、
少なくとも Windows Mobie 4.21 では同じコードで読めるので、
基本的な所は間違っていないと思うのですが…何でしょうね。

No53125 (しぃ さん) に返信
> Formで、TextBoxのプロパティウィンドウで
> aaaaaaaと入力しましたが、実行後は
> TextBoxは空になりました。

読み込みは行われるが、期待した値が返らない状態ですね。

では今度は逆に、プログラムから書き込みを行うとどうなるでしょうか?
また、書き込んだ値をプログラムから読み取ることはできますか?
引用返信 編集キー/
■53132 / inTopicNo.11)  Re[10]: レジストリからの読み込み
□投稿者/ しぃ (9回)-(2010/09/03(Fri) 17:27:32)
2010/09/03(Fri) 17:30:29 編集(投稿者)

No53129 (魔界の仮面弁士 さん) に返信
ありがとうございます。

> 読み込みは行われるが、期待した値が返らない状態ですね。
読み込みは行われているのでしょうか・・・
目で見れないので不安で仕方ないですが
> 基本的な所は間違っていないと思うのですが…
ということなので安心しました。

> では今度は逆に、プログラムから書き込みを行うとどうなるでしょうか?
> また、書き込んだ値をプログラムから読み取ることはできますか?
Buttonをクリックしたときにレジストリに書き込みをするということで
コーディングをしてみました。
private void button1_Click(object sender, EventArgs e)
{
// 操作するレジストリ・キーの名前
string KeyName = @"Control Panel";
// 書き込み処理を行う対象となるレジストリの値の名前
string GetValueName = "test";

try
{
string data = textBox1.Text;
RegistryKey key = Registry.LocalMachine.OpenSubKey(KeyName);
key.SetValue(GetValueName, data, RegistryValueKind.String);
key.Close();
Close();
}
catch (Exception e1)
{
MessageBox.Show("レジストリ[" + KeyName + "]の[" + GetValueName + "]に書き込めません!");
}
}

書き込みは出来ていませんでした。
このコードが間違っているのでしょうか?
引用返信 編集キー/
■53137 / inTopicNo.12)  Re[11]: レジストリからの読み込み
□投稿者/ 魔界の仮面弁士 (1792回)-(2010/09/03(Fri) 17:42:32)
No53132 (しぃ さん) に返信
> 書き込みは出来ていませんでした。

具体的には、どういう状態でしょうか?

・書き込み処理時にエラーになる。
・書き込んだ結果をプログラムから読み込めるが、レジストリエディタでは見えない。
・書き込んだ結果をプログラムから読み込むと、前回同様に空文字列となる。
引用返信 編集キー/
■53176 / inTopicNo.13)  Re[12]: レジストリからの読み込み
□投稿者/ しぃ (11回)-(2010/09/05(Sun) 15:58:15)
No53137 (魔界の仮面弁士 さん) に返信

遅くなり申し訳ありません。
> 具体的には、どういう状態でしょうか?
>
> ・書き込み処理時にエラーになる。
> ・書き込んだ結果をプログラムから読み込めるが、レジストリエディタでは見えない。
> ・書き込んだ結果をプログラムから読み込むと、前回同様に空文字列となる。

レジストリエディタで見ることも
プログラムで見ることもできません。
空文字列ということでしょうか・・・
なにも表示されませんでした。
引用返信 編集キー/
■53194 / inTopicNo.14)  Re[13]: レジストリからの読み込み
□投稿者/ しぃ (12回)-(2010/09/06(Mon) 13:57:31)
2010/09/06(Mon) 13:57:42 編集(投稿者)

Windowsアプリケーションで
下記の通りに、コーディングしたら
読み込みが出来ました。

try
{
//レジストリキーの名前
string sub_key = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\URL\\Prefixes";
//レジストリの取得
RegistryKey reg_key = Registry.LocalMachine.OpenSubKey(sub_key,true);
//テキストボックスに表示
textBox1.Text = (string)reg_key.GetValue("gopher");

reg_key.Close();
}
catch (NullReferenceException)
{// レジストリ・キーまたは値が存在しない
MessageBox.Show("レジストリがありません!");
}

Windows CEが原因らしいので
一応解決ということになりました。
ご迷惑おかけしました。

悩んで下さった方々
ありがとうございました。
解決済み
引用返信 編集キー/
■53197 / inTopicNo.15)  Re[14]: レジストリからの読み込み
□投稿者/ しぃ (13回)-(2010/09/06(Mon) 17:05:21)
2010/09/14(Tue) 09:17:33 編集(投稿者)

No53194 (しぃ さん) に返信
> Windows CEが原因らしいので
> 一応解決ということになりました。

今後、このページを見たかたのために・・・

Windows CEではなく、
レジストリエディタに問題がありました。
レジストリエディタは、作ったものだった為、
バグがあり、読み込みが出来ない状態になっていました。
その問題も解決し、Windows CEでも
レジストリからの読み込みが出来ました。

その後、書き込みも無事出来ました。
よかったよかった。
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -