2011-08-05 17 views
2

今度は困っています...VB.NETレジストリを読み取る

最も簡単なコード行は時々動作しますが、時にはそうではありません。まず、問題はDWORDの値を読み取ろうとしていることだと思っていましたが、一部のキーからDWORD値を読み取ることができるので問題にならないはずです。今問題は、キーに名前にスペースが含まれていると、そのキーから読み取ることができないように思えます。確かにこれはできません。私はMSがレジストリキーのパスと名前のスペースを考慮していなかったと信じることを拒否します。

、これは動作しません。だから、なぜ教えてください:

MsgBox(My.Computer.Registry.GetValue("HKEY_LOCAL_MACHINE\SOFTWARE\CA\CA ARCserve D2D\WebService", "Port", Nothing)) 

それはちょうど空のボックスをポップアップ表示されます。はい、値はレジストリに存在し、はい、私はキーを読むための許可を持っています。

EDIT:何度も繰り返して、キー名のどこにスペースがあっても、レジストリから読み取ることができないようです。真剣に?!?

EDIT AGAIN: "Ramhound"はコード例がばかだと言っています。魅力的な視点。また、失敗したが、彼自身の提案:オブジェクト

objValue = key.GetValueとしてのRegistryKey = Registry.LocalMachine.OpenSubKey( "ATI Technologies社\ CBT \ SOFTWARE")

薄暗いobjValueとして

薄暗いキー(」 ReleaseVersionは、x86に設定し、稼動しているため場合は、高度なコンパイルオプションで任意のCPU 『")

のMsgBox(objValue.ToString())全体の無駄な一日を過ごした後

+0

あなたが使用している場所の外でGetSubKeyを使用してください。私はスペースでレジスタキーを読むのに問題はないので、問題はあなたのコードで簡単です。 –

+0

あなたの質問のいくつかは、あなたが主題に関する研究をほとんど行っていないことを示しています。私が指摘したように、私はレジストリを読んでいるコードを持っていますが、私はこの問題を抱えていないので、唯一の説明はコードです。実際のコードがよく問題になる場合は、「コード例」も発行します。 –

+4

市民になってください – Martin

答えて

7

、解決策は、あなたのVSのプロジェクトに設定することです』 64ビットOSに制限されていますレジストリの "Wow6432node"

1

32ビットモードでvb.netアプリケーションを実行しているときに64ビットバージョンのWindows 7よりも注目に値するのは、Microsoft.Win32.RegistryKeyオブジェクトを使用するときにWow6432Nodeキーが表示されないことです。あなたがSOFTWARE \ WOW6432NODE

にリダイレクトされている「ソフトウェア」キーにGetSubKeyNames()を行うと

Dim myReg As Microsoft.Win32.RegistryKey = Microsoft.Win32.Registry.LocalMachine 
    Dim myReg_Key As Microsoft.Win32.RegistryKey 

    myReg_Key = myReg.OpenSubKey("SOFTWARE") 
    strRegistry_Keys = myReg_Key.GetSubKeyNames() 
    bool64_Bit_OS = False 

    For Each strSub_Key As String In strRegistry_Keys 
     If strSub_Key = "Wow6432Node" Then 
      bool64_Bit_OS = True 
     End If 
    Next 

:私は、私は右のODBCドライバのサブキーを取得するために読むために必要などのキーをチェックするために、このコードを書きました

これにより、どのOracle ODBCドライバを使用するのかを調べるために、どのサブキーを調べる必要がないかのように、自分のコードを簡単にすることができます。

クリスチャン

関連する問題