レジストリに次のキーがあります。
下:HKEY_LOCAL_MACHINE\SOFTWARE\RSA
値オブジェクトの呼び出し-WebExControlManagerPath
があり、その値はc:\
私はこれをやろうとしています:
var r = Registry.GetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\RSA", "WebExControlManagerPth",null);
if(r!=null)
ProcessAsUser.Launch(ToString());
ただし、r
の値は常にnullです。
何か案は?
HKEY_LOCAL_MACHINE Hiveには、バッチスクリプトの場合と同じようにC#で行う方法とは異なります。あなたが呼ぶ Registry.LocalMachine
、 など:
RegistryKey myKey = Registry.LocalMachine.OpenSubKey( @"Software\RSA", false);
String value = (String)myKey.GetValue("WebExControlManagerPth");
if (!String.IsNullOrEmpty(value))
{
ProcessAsUser.Launch(ToString());
}
更新:
Nullを返す場合は、ビルドアーキテクチャをAny CPUに設定します。オペレーティングシステムによって、32ビットレジストリと64ビットレジストリの仮想化が異なる場合があります。参照: http://msdn.Microsoft.com/en-us/library/windows/desktop/aa965884%28v=vs.85%29.aspx 、 Reading 64bit Registry from a 32ビットアプリケーション 、および http://msdn.Microsoft.com/en-us/library/windows/desktop/ms724072%28v=vs.85%29.aspx 。
ステートメントジェイソン が正しい、オペレーティングシステムに問題がある、以下のコードが解決に役立ちます。
RegistryKey localKey;
if(Environment.Is64BitOperatingSystem)
localKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64);
else
localKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32);
string value = localKey.OpenSubKey("RSA").GetValue("WebExControlManagerPth").ToString();
64ビットのオペレーティングシステムを使用している場合、HKEY_LOCAL_MACHINE\SOFTWARE\RSA
実際に探しているのはHKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\RSA
それがnullを取得する理由です
パスの先頭に余分な「\」がありましたが、正しく設定されていることを確認してください。
regedt32.exeを使用してレジストリキーのセキュリティ権限を確認します。管理者として実行しており、UACがオフになっているかどうかを確認してください。 opensubkeyのドキュメントによると、キーにアクセスする前にまず開く必要があります。 http://msdn.Microsoft.com/en-us/library/z9f66s0a.aspx
ここでの解決策はどれもうまくいきませんでした。レジストリの読み取りからnullが返されていました。上記の回答の融合に基づいて、ようやく私に役立つ解決策を見つけました。正しい方向に向けてくれてありがとう。
私はパーティーに遅れたことを感謝しますが、上記の解決策が彼らのために機能しない場合、これは他の人を助けるかもしれないと思いました。
この関数はクラスの一部です:
/// <summary>
/// Gets the specified setting name.
/// </summary>
/// <param name="settingName">Name of the setting.</param>
/// <returns>Returns Setting if the read was successful otherwise, "undefined".</returns>
public static string get(string settingName)
{
RegistryKey key;
if (Environment.Is64BitOperatingSystem)
key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Wow6432Node\MyCompany\MyProductName", false);
else
key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\MyCompany\MyProductName", false);
try
{
String value = (String)key.GetValue(settingName);
return value;
}
catch
{
// Null is not returned as in this case, it is a valid value.
return "undefined";
}
finally
{
key.Close();
}
}