значение тега файла settingcontent-ms - PullRequest
0 голосов
/ 20 марта 2020

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 к этому тегу или хотя бы полезной информации об этом теге? Я просто не могу представить, чтобы что-то еще изменилось, но я думаю, что мне нужно что-то изменить в соответствии с ключами реестра моего приложения.

1 Ответ

0 голосов
/ 23 марта 2020

Я нашел решение: просто поместите GUID приложения (такой же, как в PageID) в DeepLink. Для этого вам нужно записать этот GUID в виде строкового значения в HKEY_CLASSES_ROOT\CLSID\%App GUID%\System.ApplicationName.

Это решение. Однако я не нашел значения тега HostID: (

...