settingcontent-ms文件标签含义

settingcontent-ms file tag meaning

Windows 8 有一个特点:它可以从搜索面板(在屏幕右侧)启动应用程序。它的工作原理如下:

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 文件或在搜索面板中选择我的应用程序来通过此 "shortcut" 执行我的应用程序,系统会显示一条消息:"Unspecified error".

当我手动将 HostID 值更改为 {12B1697E-D3A0-4DBC-B568-CCF64A3F934D} 时,它开始正常工作。

我查看了注册表以查找有关这两个 GUID 的信息,但我没有找到任何信息。我还寻找了与我的应用程序对应的注册表值与另一个但有效的应用程序对应的注册表值之间的差异,但也没有发现任何显着差异。

我还尝试删除此文件并在 ProcMon 下登录系统,我发现了一些时刻:资源管理器尝试打开文件但失败 ERROR_FILE_NOT_FOUND,资源管理器创建丢失的文件,读取注册表并写入一些东西到创建的文件,然后关闭文件。但是我在这些消息之间没有发现任何有趣的东西,可以帮助我解决我的问题。

我发现注册表项 HKEY_CLASSES_ROOT\CLSID\%App GUID%\System.ApplicationName 包含与 DeepLink 标签完全相同的内容(这是我的应用程序中的第一个错误 - 指定的键为空),但是 [=47 的问题=] HostID 仍然存在。

有谁知道,它是什么以及如何让 Windows 将正确的 GUID 写入此标签,或者至少是关于此标签的一些有用信息?我无法想象还有什么可以改变的,但我认为,我需要改变一些与我的应用程序注册表项相对应的东西。

我找到了解决方案:只需将应用程序的 GUID(与 PageID 中的相同)放入 DeepLink。 为此,您需要将此 GUID 作为字符串值写入 HKEY_CLASSES_ROOT\CLSID\%App GUID%\System.ApplicationName.

这就是解决方案。但是,我还没有找到 HostID 标签的含义:(