tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトル不揮発性レジストリの書き込み方
記事No14173
投稿日: 2009/10/15(Thu) 14:43
投稿者もりぞう
VB6からファイルの関連付けをしたいと思っています。
HKEY_CLASSES_ROOTにRegSetValueExを使ってレジストリに書き込んでいます。
XPではこれで関連付けができていたのですが、
Vistaはうまくいきません。

と、ここまでは
記事No    : 13800-13805
投稿日    : 2009/07/02-2009/07/03
の記事で書かれていたのと同じ現象が私にも起きているのですが、
このスレッドの最後は
「揮発性レジストリとして書き込んでました。
RegSetValueExばかり見てて気づいていませんでした。」で終わっており、具体的に
「不揮発性レジストリ」としてどのようにVB6で書き込むのか示していただいていません。
どなたか、VB6でVISTA上のレジストリのHKEY_CLASSES_ROOTへ不揮発性で書き込む方法をお教え願えないでしょうか。
よろしくお願いいたします。

[ツリー表示へ]
タイトルRe: 不揮発性レジストリの書き込み方
記事No14174
投稿日: 2009/10/15(Thu) 15:16
投稿者オショウ
> どなたか、VB6でVISTA上のレジストリのHKEY_CLASSES_ROOTへ不揮発性で書き込む方法をお教え願えないでしょうか。
> よろしくお願いいたします。

  VISTAなんで、UACによる関係でアクッス拒否となっているはずです。
  管理者権限を持てば、書けます。

以上。

[ツリー表示へ]
タイトル不揮発性レジストリの書き込み方
記事No14176
投稿日: 2009/10/15(Thu) 21:19
投稿者もりぞう
お返事ありがとうございます。

>   管理者権限を持てば、書けます。
ということは、「不揮発性でレジストリに書き込む」ということは、「管理者権限でレジストリに書き込むためのプログラムを実行する」ことという意味なのですね。

先に引用した中で、
「UACは無効にしています」として、質問が続いていたため、VB6のプログラムの中で何らかコードを追加、または変えることにより不揮発性レジストリへ書き込みができると考えていました。

そのような方法があるとよいのですが、たぶんないのですね。

勉強になります。ありがとうございます。
   

[ツリー表示へ]
タイトルRe: 不揮発性レジストリの書き込み方
記事No14177
投稿日: 2009/10/15(Thu) 22:22
投稿者魔界の仮面弁士
> >   管理者権限を持てば、書けます。
> ということは、「不揮発性でレジストリに書き込む」ということは、「管理者権限でレジストリに書き込むためのプログラムを実行する」ことという意味なのですね。

違います。それとこれとは別の話です。

揮発性キーとは、再起動すると消えてしまう一時的な設定です。
不揮発性キーはその逆で、再起動しても残る永続的な設定です。

RegSetValueEx の第一引数には、レジストリキーのハンドルを渡しますよね。
つまり書き込む前に、そのレジストリ キーを開いておく必要があるという事です。

そして、そのキーを新たに作成する場合、RegCreateKeyEx を使う事になります。
そして不揮発性かどうかの指定は、この関数に指定した定数にて決定されます。

 REG_OPTION_NON_VOLATILE 不揮発性(ディスク書き込み)。再起動しても失われない。
 REG_OPTION_VOLATILE     揮発性(メモリ書き込み)。再起動すると失われる。
 

しかし、XP では正常に実行できていたという事から、このプログラムが
揮発性キーを作成していたという可能性は低いと考えられます


そこで、管理者権限の話となります。

そもそも HKEY_CLASSES_ROOT というのは、通常、インストーラなどが扱うべき場所です。
読み込みは許されていますが、書き込みには充分な権限が必要です。(Vista 以前でも)

XP であっても、Administrators ではなく、Users 権限のみのユーザーが実行すれば、
レジストリ登録は失敗するでしょう。Vista では、セキュリティが強化・変更されて
いますので、この問題がより浮き彫りになってきます。



なので、まずはプログラムを修正する前に、そのアプリを管理者モードで実行してみて、
原因が権限にあるのかどうか、問題の切り分けを行っておいた方が良いでしょう。

[ツリー表示へ]
タイトル不揮発性レジストリの書き込み方
記事No14178
投稿日: 2009/10/15(Thu) 23:22
投稿者もりぞう
素晴らしい回答をありがとうございます。
揮発性キーと不揮発性キーとRegCreateKeyExの設定の関連がわかりました。
また、管理者権限との関連も理解できました。

現在作成中のアプリをVISTA上で管理者モードで実行すると、今回の問題とは別のことでエラーとなることもわかりました。そのため、レジストリ書き込みの部分のみのプログラムに作成しなおして、管理者権限で実行したところレジストリに書き込まれました。
このことから管理者モードでなかったことがレジストリに書き込みできない原因であることがわかりました。
本当に助かりました。また1歩進むことができます。ありがとうございます。

[ツリー表示へ]