J'ai la clé suivante dans mon registre:
under: HKEY_LOCAL_MACHINE\SOFTWARE\RSA
J'ai un objet de valeur call - WebExControlManagerPath
et sa valeur est c:\
J'essaie de faire ceci:
var r = Registry.GetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\RSA", "WebExControlManagerPth",null);
if(r!=null)
ProcessAsUser.Launch(ToString());
Mais la valeur r
est toujours nulle.
Des idées?
Vous n'accédez pas à la ruche HKEY_LOCAL_MACHINE de la même manière que vous le faites en C # comme vous le feriez pour les scripts par lots. Vous appelez Registry.LocalMachine
, en tant que tel:
RegistryKey myKey = Registry.LocalMachine.OpenSubKey( @"Software\RSA", false);
String value = (String)myKey.GetValue("WebExControlManagerPth");
if (!String.IsNullOrEmpty(value))
{
ProcessAsUser.Launch(ToString());
}
Mise à jour:
S'il renvoie null, définissez votre architecture de construction sur Any CPU. Le système d'exploitation peut virtualiser les registres 32 bits et 64 bits différemment. Voir: http://msdn.Microsoft.com/en-us/library/windows/desktop/aa965884%28v=vs.85%29.aspx , Lecture du registre 64 bits à partir d'une application 32 bits , et http://msdn.Microsoft.com/en-us/library/windows/desktop/ms724072%28v=vs.85%29.aspx .
Le déclaration de Jason a raison, le système d'exploitation est le problème, le code ci-dessous vous aidera à le résoudre.
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();
si vous utilisez un système d’exploitation 64 bits, lorsque vous essayez d’obtenir HKEY_LOCAL_MACHINE\SOFTWARE\RSA
, il recherche en fait HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\RSA
, c’est pourquoi vous obtenez la valeur null.
J'avais extra "\" au début de mon chemin, assurez-vous que c'est bien réglé.
examinez les autorisations de sécurité sur la clé de registre avec regedt32.exe. vérifiez si vous utilisez l'administrateur et que le contrôle de compte d'utilisateur est désactivé. Selon la documentation opensubkey, vous devez l’ouvrir avant d’accéder aux clés. http://msdn.Microsoft.com/en-us/library/z9f66s0a.aspx
Aucune des solutions ici ne fonctionnait pour moi, je devenais toujours null renvoyé de mon registre lu. J'ai finalement trouvé une solution qui a fonctionné pour moi, basée sur une fusion des réponses ci-dessus. Merci à tous de m'avoir orienté dans la bonne direction.
J'apprécie le fait que je sois en retard à la fête, mais je pensais que cela pourrait aider les autres si les solutions ci-dessus ne fonctionnaient pas pour eux.
Cette fonction fait partie d'une classe:
/// <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();
}
}