2012-02-28 17 views
2

私はWinCE 5デバイスを使って開発しています。Windows CEハイブサブキーのフラッシュ登録

私は、永続的な媒体上にあるハイブベースのレジストリに対する変更を保存しています。私のキーはHKLM \ Softare \ AppNameの下にあります。参照のためにHKLM \ RegPersisted = 1。

コンパクトフレームワークのサブキーでFlush()を呼び出しても、すぐに電源を切ると変更が保持されないことがわかりました。私は

Microsoft.Win32.Registry.LocalMachine.Flush(); 

を呼び出す場合

同様に、私は同じ結果を得ます。

私はHKLMのためのuintで

[DllImport("coredll.dll", EntryPoint = "RegFlushKey", SetLastError = true)] 
public static extern uint RegFlushKey(uint hKey); 

を呼び出す場合、私はすぐ後にオフにした場合しかし、その後、変更が持続しません。

どのようなアイデアを定期的な.Netバージョンが動作していないのですか?あるいはおそらく彼らは働いていますが、なんらかの理由でそれは怠け者ですが、coredllの直接版は怠け者ではありませんか?

ありがとうございました。 Compact Frameworkのための(C:\Program Files\Microsoft.NET\SDK\CompactFramework\v2.0\Debugger\BCLに位置)mscoreeに反射板を使用して

答えて

1

がRegistryKey.Flushへの呼び出しは、単にここで終わることを示しています

[DllImport("mscoree", EntryPoint="#481")] 
public static extern int FlushKey(IntPtr hRootKey); 

この時点で、それは我々ができるようにコンパイルネイティブコードになります」それ以上は追跡しないでください。 mscoreeは単にあなたのためにRegFlushKeyを呼び出すと思うでしょうが、あなたのテスト(私は結果を確認していません)は、何か他のことをしていることを示しています。私が考えることができる唯一の回避策は、手動でP/Invoke経由でフラッシュすることです。

はあなたが管理する専用コードこと特定です変更を保存したことがないが、P /常にバージョンを呼び出すていますか?

+0

そのおかげでありがとう。私は100%確実ではありません(残念ながら、圧力がこのデッドラインから外れるまで私の実験を繰り返すことはできません)が、私がしたのは:a)設定値、フラッシュキー(.net)、リブート、値が正しくありませんでした。 a)設定値、HKLM(.net)をフラッシュし、リブート、チェックキーを押します。値が正しくありませんでした。 c)値を設定し、p/invoke、reboot、checkキーでフラッシュします。間違いなく正しい値でした。私が言うように、この繰り返しは1回だけでしたが、a)とb)が確かに少なくとも「時には」働かないことを実証するのに十分でした。 – Nik