我正在开发Windows 8 x64上的c#.net 3.5 Windows服务。在作为服务运行时在HKEY_Classes_root中缺少密钥
我需要看看特定的软件包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个子键。
什么可能导致此行为?
UPDATE: 的问题是,该服务是不同的用户下运行,并在服务查询注册表,因此不会出现每次只出现在HKEY_CURRENT_USER包。
有没有办法让服务来检查另一个用户注册表(即使用户当前没有登录)?
您是否在'HKEY_LOCAL_MACHINE \ Software \ Classes'中看到了额外的键? 'HKEY_Classes_Root'是本地机器和用户类的组合。 –
您的应用程序正在编译为什么架构? x86或x64? – Arran
这些是Windows应用商店的应用密钥,我肯定会采取安全措施来防止黑客入侵它们。尝试使用该服务的其他用户帐户。 –