1

私はこれが非常に簡単だと思っていましたが....

そうですね、私がやろうとしているのは、レジストリから値を読み取ることだけです。私はいくつかの例を経験しましたが、それらのどれも機能させることができません。また、アプリケーションを管理者モードで実行しようとしましたが、まだ何もしていません。誰か助けてくれませんか?

私が試したすべての例から、最も単純なものを使用します。

これは機能します:

Dim val As String
val = Registry.LocalMachine.OpenSubKey("Hardware\Description\System\CentralProcessor\0").GetValue("Identifier").ToString()
MsgBox(val)

これ(私が欲しいもの)はしません:

Dim val As String
val = Registry.LocalMachine.OpenSubKey("SOFTWARE\PTSClient").GetValue("ConfigDB").ToString()
MsgBox(val)

後者のパスと値は、レジストリに手動で作成したものです。2つの間のアクセス許可を確認しましたが、まったく同じです。また、アプリを管理者として実行しようとしました。val= 行で実行時エラーが発生します。次のように表示されます。「new」キーワードを使用してオブジェクト インスタンスを作成してください。

何か案は?さまざまなオンラインの例はすべて失敗しました。私の人生では、理由がわかりません...

乾杯、J

4

1 に答える 1

2

x86 用にコンパイルされたサンプル アプリケーションであなたのコードを試してみましたが、予想どおり、null 値の例外で失敗しました。

x86 モード用のアプリケーションを作成し、64 ビット環境で実行しているとします。
もちろん、そうでない場合はお知らせください。この回答は削除します。

上記の状況では、LocalMachine.Software レジストリ パスでの読み取り/書き込みの呼び出しは、オペレーティング システムによって自動的に Software\Wow6432Node サブキーでの読み取り/書き込みに変更されるため、コードは手動で挿入されたキーを見つけることができません。 (「ソフトウェア\PTSClient」)。
このコードはRegistry.LocalMachine.OpenSubKey("SOFTWARE\PTSClient")、ConfigDB 値の取得に失敗する原因となる戻り値として null 値を返します。

キー/値を Software\Wow6432Node パスに追加するか、AnyCPU モード用にアプリケーションをコンパイルするか、コードで値をレジスタに書き込む必要があります (値は Wow6432Node にリダイレクトされます)。

于 2012-09-18T22:13:57.917 に答える