Ich schreibe Code, der überprüfen muss, ob ein Programm installiert ist, und wenn ja, den Pfad abrufen. Der Pfad wird entweder in HKEY_LOCAL_MACHINE\SOFTWARE\Some\Registry\Path\InstallLocation
oder HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Some\Registry\Path\InstallLocation
gespeichert, abhängig davon, ob die 32-Bit- oder 64-Bit-Version des Programms installiert ist.Überprüfen von Werten in 32-Bit- und 64-Bit-Registrys von x64-Anwendung?
Der Code, den ich jetzt haben den Weg für eine 32-Bit-Installation zu finden, schlägt fehl, wenn auf einem 64-Bit-Maschine ausgeführt wird:
const string topKeyPath = @"HKEY_LOCAL_MACHINE\SOFTWARE";
const string subLocationPath = @"Some\Registry\Path\InstallLocation";
object pathObj = Registry.GetValue(topKeyPath + @"\" + subLocationPath, null, null);
if (pathObj == null) // if 32-bit isn't installed, try to find 64-bit
{
try
{
RegistryKey view32 = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32);
view32 = view32.OpenSubKey("SOFTWARE");
view32 = view32.OpenSubKey(subLocationPath);
pathObj = view32.OpenSubKey(subLocationPath, false).GetValue(null);
if (pathObj == null)
{
throw new InvalidOperationException("Not installed.");
}
}
catch (Exception e)
{
throw new InvalidOperationException("Not installed.", e);
}
}
string installPath = Convert.ToString(pathObj);
Ist Ihnen App für AnyCPU Zielplattform kompiliert (ohne 32-Bit-Flag Bevorzugen)? – Steve
Mein Testcode ist für AnyCPU kompiliert, aber ich bin nicht sicher, auf welche Kombinationen die eventuelle Software zielt. – Benjin