レジストリの反映時間について質問させてください。
exeAでは、SaveSettingで、レジストリに値を書き込み後、
GetSettingで読んで書き込まれた値を確認しています。
exeAからexeBを起動し、exeBでレジストリを読んでいます。
上記のプログラムで、レジストリに100がセットしてある場合、
exeAで1をセットすると、きちんとセットでき、確認でGetSettingしても1が入っています。
ところが、exeBを起動すると、レジストリの値がなぜか100と読まれます。
少し時間を置いて、起動したり、何度か繰り返すと正常な値(1)を読む場合もあります。
納品先の事象で詳しいテストが行えない状況なのですが、
どんな些細なことでも良いのでご存知のかたがあればお教え下さい。
よろしくお願いいたします
通常は考えられませんね、実際2つEXEを並べてやってみても
値の変更は直ぐに反映されます。
書き込みバッファの関係でしょうか?
レジストリーに書き込んだ後直ぐ、レジストリーエディターで
読んでみたらどうなりますか?
切羽詰まってそうですね、書き込みバッファはどのくらいか忘れましたが、
苦し紛れならレジストリーに書き込んだ後直ぐに100K位のダミーのデーターを
適当なファイルに吐かせたらどうかな、自信は無いけど。
早速の回答ありがとうございます。
レジストリに書き込んだ直後のデータは、
一度確認しているのですが、
きちんと書き換わっていました。
又、exeAでは書き換わったレジストリ値の
読み書きも問題なくできています。
少し気になっていたのですが、
GetSetting SaveSettingがどのレジストリー値を更新しているのか、
明示する方法はないのでしょうか。
当方レジストリの値は、
HKEY_CURRENT_USER\Software\VB and VBA Program Settings\以下
に書き込まれていると判断していますが.....
書き込んでしかも確認しているのに読めないと言うことですよね。
症状からして、キャッシュに書き込まれたものが返ってきている
可能性がもしかしてあるかなと思ったのですが。
http://support.microsoft.com/kb/332023/ja
確認方法としては、いきなり電源を切って見ると判るのですが、
あまりお勧めは出来ませんので代替案として、キャッシュ以上の
書き込みをやってみたら判るのかなと。
>GetSetting SaveSettingがどのレジストリー値を更新しているのか、
>明示する方法はないのでしょうか。
レジストリーエディターで検索すればわかるのでは。
おはようございます。
Knowledge Base読ませていただきました。
我龍院さんがおっしゃっている内容は、
①exeAがレジストリに書き込む
②書き込み遅延キャッシュの発生。
③レジストリ実データと遅延キャッシュの内容に差異が発生。
④exeBはレジストリ実データを読みとり。
ということでしょうか....
早速遅延キャッシュを実データに書き込むべく、ファイル書き出しのテストを行ってみたいと思います。
又、同じようなことがウィルスソフトのレジストリ改変に関連して発生することは考えられないかなと少し思いました。
読み書き場所の件ですが、SaveSettingは書き込みを確認しているので問題はないかと思いますが、
GetSettingは、どこを読んでいるのか確認できていません。
HKEY_CURRENT_USER\Software\VB and VBA Program Settings\以下を
読んでいると決め付けてテストを行っています。^^
最後に、現象が起こっている現場とは直接話しをすることができず、
なかなか思ったようなテストができないのが現状です...
又、書き込んでいなかたのですが、現象が発生しているPCは
WindowsNT 4.0でKnowledge Baseの対象OSからははずれそうです。
我龍院には先日より大変ありがとうございます。
訂正させてください。
我龍院には先日より大変ありがとうございます。
↓
我龍院様には先日より大変ありがとうございます。
現場でのテストがなかなか叶わず、困っております。
結果が分かり次第、書き込ませていただきます。
SaveSettingでの書き込みを、
RegSetValueExに変更したところ、
問題なく別のexeからも参照できるようになりました。
結果、何が問題だったのか明確にはなりませんでしたが、
これ以上現場に迷惑をかけるわけにもいかず、とりあえずOK
ということになりました。
我龍院様ありがとうございました。
ツイート | ![]() |