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 или выбрав мое приложение на панели поиска, система выдаст мне сообщение: «Unspecified error».
Когда я вручную изменю HostID
значение {12B1697E-D3A0-4DBC-B568-CCF64A3F934D}
, оно начинает нормально работать.
Я просмотрел реестр, чтобы найти что-то об этих двух GUID, но ничего не нашел. Также я искал разницу между значениями реестра, соответствующими моему приложению и другому, но работающему приложению, и не нашел никаких значимых различий.
Также я попытался удалить этот файл и войти в систему в разделе ProcMon, я поймал некоторые моменты: проводник пытается открыть файл и завершается с ошибкой ERROR_FILE_NOT_FOUND
, проводник создает отсутствующий файл, читает реестр и что-то записывает в созданный файл, затем закрывает файл. Но я не нашел ничего интересного между этими сообщениями, которое могло бы помочь мне решить мою проблему.
Я обнаружил, что ключ реестра HKEY_CLASSES_ROOT\CLSID\%App GUID%\System.ApplicationName
содержит точно то же самое с тегом DeepLink
(это было первая ошибка в моем приложении - указанный ключ был пустым), но проблема с «неправильным» HostID
остается.
Кто-нибудь знает, что это такое и как заставить Windows написать правильный GUID к этому тегу или хотя бы полезной информации об этом теге? Я просто не могу представить, чтобы что-то еще изменилось, но я думаю, что мне нужно что-то изменить в соответствии с ключами реестра моего приложения.