gpt4 book ai didi

c# - Visual Studio 安装项目自定义操作未在当前用户中找到正确的注册表项

转载 作者:太空宇宙 更新时间:2023-11-03 13:03:31 25 4
gpt4 key购买 nike

在我们完成安装之前,我们的软件要求用户安装 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” key ,而没有其他任何内容,尽管该位置存在“15.0” key 以及许多其他 key 。

这不是 x86 与 x64 的问题,因为这些机器上不存在 HKCU\Software\Wow6432Node\Microsoft\Office。不管怎样,我确实已经尝试过 RegistryKey.OpenBaseKey(RegistryHive.CurrentUser, RegistryView.Registry64),但这似乎没有帮助。

最佳答案

这个问题实际上源于最近的 Windows 更新(See relevant KB article 用于解释和可能的解决方法)。

当指定具有提升权限的 Registry.CurrentUser 时,它实际上并不使用 HKEY_CURRENT_USER 注册表配置单元,而是使用 HKEY_USERS\.DEFAULT。 currentUser.GetSubKeyNames() 返回的子键名实际上是在 HKEY_USERS\.DEFAULT\Software\Microsoft\Office 中找到的键。我们能够通过完全忘记 Registry.CurrentUser 并使用 RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64) 来解决这个问题。

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

关于c# - Visual Studio 安装项目自定义操作未在当前用户中找到正确的注册表项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31597746/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com