Windows 8 有一个功能:它可以从搜索面板(屏幕右侧)启动应用程序。它的工作原理如下:
- 开发人员按照此说明注册他或她的应用程序。这是一个有点遗留的指令,但我参与的项目使用这种方式来注册它的设置。
- 在用户登录时,Windows 会在其中创建(如果不存在)一个特殊的 .xml 文件,
C:\User\<UserName>\AppData\Packages\windows.immersivecontrolpanel_cw5n1h2txyewy\LocalState\Indexed\Settings\en-US
其内容如下所示。这个文件有扩展名settingscontent-ms
- 一旦用户单击此文件,系统就会启动指定的应用程序(实际上是资源管理器调用它,正如我在 ProcMon 中发现的那样)。
xml文件内容:
<?xml version="1.0" encoding="UTF-8"?>
<PCSettings>
<SearchableContent xmlns="http://schemas.microsoft.com/Search/2013/SettingContent">
<ApplicationInformation>
<AppID>windows.immersivecontrolpanel_cw5n1h2txyewy!microsoft.windows.immersivecontrolpanel</AppID>
<DeepLink>%Canonical name or application path%</DeepLink>
<Icon>%App path%,-%Resource number%</Icon>
</ApplicationInformation>
<SettingIdentity>
<PageID>%GUID as in instruction above%</PageID>
<HostID>{7E0522FC-1AC4-41CA-AFD0-3610417A9C41}</HostID>
<Condition>shcond://v1#RegkeyExists;0;Regkey;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel\NameSpace\%GUID as in instruction above%</Condition>
</SettingIdentity>
<SettingInformation>
<Name>@%App path%,-%Resource number%</Name>
<Description>@%App path%,-%Resource number%</Description>
<HighKeywords>%App decription%</HighKeywords>
</SettingInformation>
</SearchableContent>
</PCSettings>
我们可以看到名称为 的节点HostID
。Windows 将代码 GUID 中指定的内容写入此节点,但它破坏了我的应用程序的工作能力。如果我尝试通过单击 xml 文件或在搜索面板中选择我的应用程序来通过此“快捷方式”执行我的应用程序,系统会向我显示一条消息:“未指定的错误”。
当我手动将HostID
值更改为 时{12B1697E-D3A0-4DBC-B568-CCF64A3F934D}
,它开始正常工作。
我查看了注册表以查找有关这两个 GUID 的信息,但我什么也没找到。此外,我查找了与我的应用程序和另一个应用程序对应的注册表值之间的差异,但也没有发现任何显着差异。
我也尝试删除这个文件并在 ProcMon 下登录系统,我抓住了一些时刻:资源管理器尝试打开文件并失败ERROR_FILE_NOT_FOUND
,资源管理器创建丢失的文件,读取注册表并将某些内容写入创建的文件,然后关闭文件。但是我在这些消息之间没有发现任何有趣的东西,可以帮助我解决我的问题。
我发现注册表项HKEY_CLASSES_ROOT\CLSID\%App GUID%\System.ApplicationName
包含与标记完全相同的内容DeepLink
(这是我的应用程序中的第一个错误 - 指定的密钥为空),但“错误”的问题HostID
仍然存在。
有谁知道,它是什么以及如何让 Windows 将正确的 GUID 写入这个标签,或者至少有一些关于这个标签的有用信息?我无法想象还有什么要改变的,但我认为,我需要改变一些与我的应用程序注册表键相对应的东西。