settingcontent-ms文件标签含义
settingcontent-ms file tag meaning
Windows 8 有一个特点:它可以从搜索面板(在屏幕右侧)启动应用程序。它的工作原理如下:
- 开发者在此 instruction 之后注册他或她的应用程序。这是一个有点遗留的指令,但我参与的项目使用这种方式来注册它的设置。
- 在用户登录时 Windows 在
C:\User\<UserName>\AppData\Packages\windows.immersivecontrolpanel_cw5n1h2txyewy\LocalState\Indexed\Settings\en-US
中创建(如果 none 存在)一个特殊的 .xml 文件,其内容如下所示。此文件的扩展名为 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 文件或在搜索面板中选择我的应用程序来通过此 "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
标签的含义:(
Windows 8 有一个特点:它可以从搜索面板(在屏幕右侧)启动应用程序。它的工作原理如下:
- 开发者在此 instruction 之后注册他或她的应用程序。这是一个有点遗留的指令,但我参与的项目使用这种方式来注册它的设置。
- 在用户登录时 Windows 在
C:\User\<UserName>\AppData\Packages\windows.immersivecontrolpanel_cw5n1h2txyewy\LocalState\Indexed\Settings\en-US
中创建(如果 none 存在)一个特殊的 .xml 文件,其内容如下所示。此文件的扩展名为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 文件或在搜索面板中选择我的应用程序来通过此 "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
标签的含义:(