2017-09-04 2 views
1


変化を見つけることができません。は、C#でレジストリを編集したが、私は次のコードでのC#を経由して、私のレジストリを変更しregeditを

RegistryKey regKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32); 
RegistryKey openSubKey = regKey.OpenSubKey(@"SOFTWARE\ASA\Suite", true); 
openSubKey?.SetValue("Password", encryptedString, RegistryValueKind.String); 
openSubKey?.SetValue("UserName", UserNameTextBox.Text, RegistryValueKind.String); 
openSubKey?.SetValue("DomainName", DomainNameTextBox.Text, RegistryValueKind.String); 
openSubKey?.Close(); 
regKey.Close(); 

これらのエントリがすでに存在しなかったとだけ交換しました。同じ種類のコードを使用して設定を読み込むと、正しい設定が返されますが、regedit.exeでレジストリを開いて手動で検索すると、古い値しか見つかりません。 regedit.exeには次のパスがあります:Computer\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\ASA\Suite 私は既にWOW6432Nodeなしで(そしてHKCUでも)パスを調べましたが、ASAエントリはまったくありません。
誰かがそれをどう考えているのですか?どうして私が行った変更が見えないのですか?私はここで完全に困惑しています...

EDIT:プロジェクトをanyCPUからx86に変更しましたが、変更はありませんでしたが、x64に変更すると、読み込まれたキーはregedit.exeに表示されたものでした。しかし、私はレジストリハイブの32ビット版を開きます。ここに何かを書くと、問題は続きます...どうして変更ができないのですか? x64上のx86アプリケーションは、自動的にWOW6432Nodeに書き込むべきでしょうか?

EDIT2:x86版をx86版でテストしました。私はレジストリを変更し、それを読むことができますが、regeditを使って私は変更を見ることができません... wtfはこれですか?

EDIT3:HKCR \ VirtualStore \ MACHINE \ SOFTWARE \ ASA \ Suiteの下で変更されたキーが見つかりました。理由はわかりませんが、回答を検索してここに投稿します。

答えて

0

私は答えがあります。私はマニフェストを使用したくないので削除して、アプリケーションを昇格させなければならないかどうか尋ねなかった。だから、通常のユーザ(たとえログインしたユーザが管理者権限を持っていても)がHKLMに書き込むことができないので、HKCU \ VirtualStoreへの鍵を書きました...そうすれば、私のアプリケーションはキーを読むこともできるが、 exeそれは期待された場所ではなかった。

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> 

今、私もx64およびx86バージョンを構築する必要はありませんが、代わりに任意のCPUを使用して、私のアプリをやらせることができます:私はマニフェストを実装してのrequestedExecutionLevelの行を変更し、この問題を回避するには (つまり:RegistryView.Registry32またはRegistryView.Registry64を使用するかどうかを調べる)

0

他の人が上書きしている可能性がありますか? こちらがお手伝いできますか? http://www.advancedinstaller.com/user-guide/registry-wow6432-node.html

Wow6432Nodeレジストリエントリは、64ビットWindows版を実行していることを示します。

オペレーティングシステムは、このキーを使用して、64ビットWindowsバージョンで実行される32ビットアプリケーションのHKEY_LOCAL_MACHINE \ SOFTWAREビューを個別に表示します。 32ビットアプリケーションがHKEY_LOCAL_MACHINE \ SOFTWARE \\サブキーの下の値を書き込みまたは読み取ると、アプリケーションはHKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \\サブキーから読み取ります。

レジストリリフレクタは、32ビットと64ビットのレジストリビュー(主にCOM登録用)間の特定の値をコピーし、「ラストライター勝利」アプローチを使用して競合を解決します。

+0

しかし、なぜ私はopenSubKey.GetValue(xx)で値を読み取ることができますが、regeditには表示されません。私はこれが答えだとは思わないが、とにかく感謝する。 –

関連する問題