Visual Studio安装程序项目自定义操作未在当前用户

时间:2015-07-23 20:48:04

标签: c# visual-studio registry vdproj

我们的软件要求用户安装Excel 2010或2013,然后才能完成安装。我们使用Visual Studio安装项目(vdproj)和自定义操作来检查HKEY_CURRENT_USER \ Software \ Microsoft \ Office是否为14.0 \ Excel或15.0 \ Excel以确保它在那里。代码看起来像这样:

RegistryKey currentUser = Registry.CurrentUser.OpenSubKey(@"SOFTWARE\Microsoft\Office");
if (currentUser != null)
{
    foreach (key in currentUser.GetSubKeyNames())
    {
        if (key == "14.0")
        {
            // Excel 2010 is installed
        }
        else if (key == "15.0")
        {
            // Excel 2013 is installed
        }
    }
}

目前的实施情况一年多来都没有改变,我们之前没有遇到任何问题。但是,最近我们看到一些机器没有返回所有子键名。这个影响的大多数机器只返回“Outlook”键,而不是其他任何东西,尽管存在“15.0”键以及该位置存在的许多其他键。

这不是x86 vs x64的问题,因为这些计算机上不存在HKCU \ Software \ Wow6432Node \ Microsoft \ Office。无论如何,我已经尝试RegistryKey.OpenBaseKey(RegistryHive.CurrentUser, RegistryView.Registry64),但这似乎没有帮助。

1 个答案:

答案 0 :(得分:1)

该问题实际上源于最近的Windows Update(See relevant KB article的解释和可能的解决方法)。

使用提升的权限指定2时,它实际上并未使用HKEY_CURRENT_USER注册表配置单元,而是使用HKEY_USERS \ .DEFAULT。从Registry.CurrentUser返回的子键名实际上是在HKEY_USERS \ .DEFAULT \ Software \ Microsoft \ Office中找到的键。我们完全忘记了currentUser.GetSubKeyNames()并且正在使用Registry.CurrentUser来解决这个问题。

如果某人绝对需要使用HKEY_CURRENT_USER,我自己没有尝试过,但this answer + comments可能是相关的。