1

ソフトウェアの Installdir を取得できません。GetValue と OpenSubKey を試しましたが、毎回 NULL を取得します。私はVS2008、.Net 3.5、64ビットマシン、32ビットプロセス設定を使用しています。

private string GetInstallPath()
{
     string keyValue = string.Empty;
     Object key = Registry.GetValue("HKEY_CURRENT_USER\\SOFTWARE\\My Company\\My Tool", "Installdir", null);
     ...
}

そこに有効な文字列がありますが、キーはNULLを返しています。同等のコードは VC++ で動作します。問題に対する洞察を提供してください。このおそらく簡単なタスクで何が間違っているのでしょうか? 「ハイブ」は 4.0 標準なので使用できません。リンクの代わりにコード レベルのヘルプが役立ちます。

VC++ 相当

HKEY hkey = NULL;
LSTATUS status = RegOpenKeyEx( HKEY_LOCAL_MACHINE, "SOFTWARE\\My Company\\My Tool\\", 0, KEY_READ, &hkey );

if ( status == ERROR_SUCCESS )
{
  DWORD type;
  char  buff[ 100 ];
  DWORD numBytes = sizeof( buff );
  if ( RegQueryValueExA( hkey, REGISTRY_ENTRY, NULL, &type, (LPBYTE) buff, &numBytes ) == ERROR_SUCCESS )
 {
 ...
 }
4

1 に答える 1

4

お使いのマシンは x64 で、アプリは 32​​ ビットです。あなたの環境を考えると、私がチェックする最初のことは、キーがHKCU\Software\My Company\...32ビットノードではなく64ビットノードに存在HKCU\Software\Wow6432Node\My Company\...することを確認することです。キーが32ビットノードに存在する場合、アプリがそれ以外の場合は、アプリが 64 ビットであることを確認する必要があります。そうしないと、キーが見つかりません。

次のコードは私にとってはうまくいき、64ビットで実行され、Wow6432Nodeの外でキーを見つけました。「Hive」を使用できない理由がわかりません。3.5 と 4.0 の両方で機能します。

RegistryKey regKey = Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\VisualStudio\\10.0");

if (regKey != null)
{
    object val = regKey.GetValue("FullScreen");
}

更新: プラットフォーム (x86 対 x64) の問題ではない場合、.NET 3.5 を実行している私にとっては次のことも機能しました。それはおそらくアクセス許可の問題です。アプリが実行されているコンテキストがレジストリにアクセスできることを確認してください。キー (アプリを管理者またはシステムとして実行してみてください)

object test = Registry.GetValue("HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\VisualStudio\\10.0", "FullScreen", null);
于 2013-05-31T22:31:54.760 に答える