トップ回答者
起動時にMRUが表示されない

質問
回答
-
このMRUの実装はMFC標準のものですか?
MFC標準のものであれば、HKEY_CURRENT_USERで書いているのでこの現象は起きなさそうなのですが…。
独自の実装であれば、レジストリのHKEY_LOCAL_MACHINEやシステムドライブのProgram Files、Windowsフォルダには設定を書かないようにしましょう。
VC2005ではVista対応のマニフェストが存在しないため、VirtualStoreという仕組みで別の場所にリダイレクトを行うことで正常に書けたかのように振る舞いますが、VC2008ではVista対応のマニフェストが設定されるため、この仕組みが働きません。
もし、このような事情があるのであれば、UAC関連についてお調べいただき、適切な場所に保存するように修正して下さい。
-
村尾DOS さんからの引用 単純なミスで、InitInstance内のSetRegistryKey(()が削除されていました。
なぜXPまでの環境下で動いていたのか不思議ですが暫く様子を観てみます。
不思議ではありません。そう言う仕組みです。
SetRegistryKeyがないのであればiniファイルとしてWindowsフォルダに保存されます。
( http://msdn.microsoft.com/ja-jp/library/cc429779.aspx )
XPまではWindowsフォルダであっても自由に書き込めますが、VistaからはUACという仕組みが入っていますので、WindowsフォルダやProgram Filesフォルダには書き込みができません。
VC2005までで作成したアプリには互換性のため、Vistaが用意するVirtualStoreの仕組みが働き、あたかもWindowsフォルダに書き込めたように振る舞うことで、iniが正常に読み書きできます。(実際には特定のフォルダにリダイレクトされます)
しかし、VC2008で作成されたアプリには「Vistaで標準ユーザで動きます」というマニフェストが含まれていますので、VirtualStoreが機能せず、Windowsフォルダには書き込みが失敗し、MRUを保存できません。
すべての返信
-
このMRUの実装はMFC標準のものですか?
MFC標準のものであれば、HKEY_CURRENT_USERで書いているのでこの現象は起きなさそうなのですが…。
独自の実装であれば、レジストリのHKEY_LOCAL_MACHINEやシステムドライブのProgram Files、Windowsフォルダには設定を書かないようにしましょう。
VC2005ではVista対応のマニフェストが存在しないため、VirtualStoreという仕組みで別の場所にリダイレクトを行うことで正常に書けたかのように振る舞いますが、VC2008ではVista対応のマニフェストが設定されるため、この仕組みが働きません。
もし、このような事情があるのであれば、UAC関連についてお調べいただき、適切な場所に保存するように修正して下さい。
-
CRecentFileList クラスを使ってMRUの実装を試みています。
http://msdn.microsoft.com/ja-jp/library/wkfyf6y5(VS.80).aspx?ppud=4
これを参考にしているのですが、
'MRUMacros.h': No such file or directory
と蹴られてしまいます。
何か設定が必要なのでしょうか?
-
元の現象は心当たりがないため、何とも言えません。
村尾DOS さんからの引用 http://msdn.microsoft.com/ja-jp/library/wkfyf6y5(VS.80).aspx?ppud=4
これを参考にしているのですが、
'MRUMacros.h': No such file or directory
と蹴られてしまいます。
「スマート デバイス開発者のためのメモ」セクションですので、通常のMFCアプリケーション開発では使わないものだと思われます。
また、Visual Studio 2008向けの同ページには記載がないので、誤記か何かのようにも思えますが、その周辺を探ってみても有力な情報に出会えなかったため裏付けは取れていません。
-
村尾DOS さんからの引用 単純なミスで、InitInstance内のSetRegistryKey(()が削除されていました。
なぜXPまでの環境下で動いていたのか不思議ですが暫く様子を観てみます。
不思議ではありません。そう言う仕組みです。
SetRegistryKeyがないのであればiniファイルとしてWindowsフォルダに保存されます。
( http://msdn.microsoft.com/ja-jp/library/cc429779.aspx )
XPまではWindowsフォルダであっても自由に書き込めますが、VistaからはUACという仕組みが入っていますので、WindowsフォルダやProgram Filesフォルダには書き込みができません。
VC2005までで作成したアプリには互換性のため、Vistaが用意するVirtualStoreの仕組みが働き、あたかもWindowsフォルダに書き込めたように振る舞うことで、iniが正常に読み書きできます。(実際には特定のフォルダにリダイレクトされます)
しかし、VC2008で作成されたアプリには「Vistaで標準ユーザで動きます」というマニフェストが含まれていますので、VirtualStoreが機能せず、Windowsフォルダには書き込みが失敗し、MRUを保存できません。