我正在 Windows 8 x64 上开发 ac# .net 3.5 windows 服务。
我需要查看特定的包 ID 是否在节点 HKEY_CLASSES_ROOT\ActivatableClasses\Package 下。
这是代码
internal static bool IsPackageInstalled
{
get
{
try
{
var packageKey = Registry.ClassesRoot.OpenSubKey(@"ActivatableClasses\Package");
if (packageKey != null)
{
return packageKey.GetSubKeyNames().Any(key => key.StartsWith(MyPackageName, StringComparison.InvariantCultureIgnoreCase));
}
}
catch (Exception ex)
{
}
return false;
}
}
在控制台应用程序中运行此代码时,它可以正常工作并返回 true。
但是在 Windows 服务中运行代码时,我得到了错误。我尝试调试它,发现在服务中子键名称列表仅包含 2 个键,而实际上有 21 个子键。
是什么导致了这种行为?
更新: 问题是服务在不同的用户下运行,因此当服务查询注册表时,仅出现在 HKEY_CURRENT_USER 下的每个包都不会出现。
该服务有没有办法检查另一个用户注册表(即使用户当前没有登录)?