2011-01-14 10 views
1

私はC#3.5アプリケーションのUserDataレジストリサブキーを取得しようとしていますので、起動する外部プログラムのインストール場所を調べることができます。Windows 7上でHKLM Software Microsoft Windows CurrentVersion Installer を開こうとしているときに "ResolveIOD"を取得していますか?

このようなものな操作:

RegistryKey installerKey = Registry.LocalMachine.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Installer"); 

、その後

RegistryKey userDataKey = installerKey.OpenSubKey("UserData"); 

リターンはnullを。私が戻ってinstallerKey.GetSubKeyNames()を呼び出して、Installerの下にど​​のサブキー名が存在するかを調べると、サブ鍵の名前はResolveIODの1つしか返されません。私はこの鍵を見つけることができるだけを見つけることができませんでした。

regeditResolveIOD鍵がそこにいる示していない、それは一つのキーが存在しているだけのことよりもはるかに多くのことを示している - UserDataFoldersSecureなどは全てそこではなくどちらかGetSubKeyNames()によって返されます。

これは初めてレジストリハイブのインストーラセクションにアクセスしたので、間違ったことをしたことがあります。クライアントアプリケーションからこれらの(恐らく機密性の高い、セキュリティ上の)鍵を読むために私が要求しなければならない特別な許可がありますか、これは一般的にWindows 7上では容認できるものではありません。プログラムがどこにあるのか把握していますか?

これは他のレジストリの質問にも言及しているので、これは64ビットWindows上で32ビットアプリケーションとして実行されています。

+0

これはおそらく互換モードで実行する必要があります。 HKLMはWin7で管理者固有のものです。おそらくHKCUを試してみてください。 – leppie

答えて

0

最初に、Wow6432Nodeサンドボックスではなく64ビットレジストリにアクセスするには、アクセスオプションの1つとしてKEY_WOW64_64KEY(http://msdn.microsoft.com/en-us/library/ms724878%28v=vs.85%29.aspx)を含むRegOpenKeyEx関数を使用します。 http://www.pinvoke.net/default.aspx/advapi32/RegOpenKeyEx.html

はまた、UACを有効にして、unelevatedアプリは、最高の状態で、唯一HKLMへの読み取りアクセス権を持っていることに注意してください。

pinvoke.netは、C#の例があります。

関連する問題

 関連する問題