1

我正在尝试在注册表中的卸载条目中创建一个键,HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall但是当我运行代码时,它会在其中创建它HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Wow6432Node\Microsoft\Windows\CurrentVersion,我不明白它可能从哪里获取此路径。

下面是我正在使用的代码

private void addToRegistry(string installPath)
{
    using (RegistryKey parent = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall", true))
    {
        if (parent == null)
        {
            MessageBox.Show("Failed to open registry key. Installation cannot continue", "Registry Error", 
                MessageBoxButton.OK, MessageBoxImage.Error);
        }
        try
        {
            RegistryKey key = null;
            string appParent = "Boardies Email Server";
            parent.CreateSubKey(appParent);
            key = parent.OpenSubKey(appParent);
            //key = parent.OpenSubKey(appParent, true) ??
            //    parent.CreateSubKey(appParent);
            if (key == null)
            {
                MessageBox.Show("Failed to add registry entry. Error: nInstallation Aborted", "Registry Error", 
                    MessageBoxButton.OK, MessageBoxImage.Error);
                throw new Exception();
            }

            Assembly asm = GetType().Assembly;
            Version version = asm.GetName().Version;
            string exe = string.Format("{0}\\EmailServer.exe", installPath);

        }
        catch (Exception ex)
        {
            MessageBox.Show(string.Format("Failed to install, unable to insert into registry: {0}\n\nInstallation Aborted", ex.Message),
                "Registry Error", MessageBoxButton.OK, MessageBoxImage.Error);
        }
    }

感谢您的任何帮助,您可以提供。

4

3 回答 3

1

可能,您的应用程序是 32 位的,在 Windows x64 中,寄存器是虚拟化的,因此 32 位和 64 位应用程序可以共存并使用相同的寄存器键;所以您的应用程序会看到它正在这条路径中写入:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall

但真的是写在这条路上:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Wow6432Node\Microsoft\Windows\CurrentVersion

因此,理论上,如果您需要另一个 32 位应用程序的此类密钥,则应该不会有问题,因为它也会将此路径视为。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
于 2012-08-06T18:58:16.720 回答
0

那是因为您必须在正确的顶层更改值。您可以使用autoruns.exe识别正确的位置。它会为您指明正确的位置!

(请参阅下面的示例,其中我在 Windows 启动时禁用了文件系统检查)

在此处输入图像描述

该工具不仅可以定位所有启动注册表项,还可以定位所有其他服务,包括第三方安装!

于 2012-08-06T23:25:22.170 回答
0

它是一个注册表重定向器

尝试对RegistryKey.OpenBaseKey 方法使用RegistryView 枚举,请参阅RegistryView.Registry64枚举成员。

顺便说一句,您可以允许您的程序作为 64 位进程运行,这样就不会有重定向: Project => Properties => Build 选项卡:将 Platform target 更改为AnyCPU

于 2012-08-06T18:53:29.573 回答