C#获取某个程序的卸载命令

Get Uninstall Command For a Certain Program in C#

所以我正在研究这段代码,returns 一个卸载命令字符串来卸载某个程序。 我在其他问题中看到过这段代码,但似乎没有人遇到与我相同的问题。 这是代码:

public static string GetUninstallCommandFor(string productDisplayName)
    {
        RegistryKey localMachine = Registry.LocalMachine;
        string productsRoot = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products";
        RegistryKey products = localMachine.OpenSubKey(productsRoot);
        string[] productFolders = products.GetSubKeyNames();

        foreach (string p in productFolders)
        {
            RegistryKey installProperties = products.OpenSubKey(p + @"\InstallProperties");
            if (installProperties != null)
            {
                string displayName = (string)installProperties.GetValue("DisplayName");
                if ((displayName != null) && (displayName.Contains(productDisplayName)))
                {
                    string uninstallCommand = (string)installProperties.GetValue("UninstallString");
                    return uninstallCommand;
                }
            }
        }
        return "";
    }

此代码returns此错误:

System.NullReferenceException: 'Object reference not set to an instance of an object.'

products was null.

我不知道products怎么会是空的,我确实检查了那个子项,里面全是文件夹,所以我该如何解决这个问题。

为 X64 构建。在 32 位进程中,您实际上正在阅读 HKEY_LOCAL_MACHINE\Software\Wow6432Noderegistry redirection

或者您可以请求注册表的非重定向视图: Avoid Registry Wow6432Node Redirection