Установка расширения оболочки с помощью Desktop Bridge

Мое приложение Win32 требует установки расширения Windows Explorer Shell.

Я использовал Desktop App Converter для создания AppX для своего приложения. Но конвертер проигнорировал расширение оболочки, установленное устаревшим установщиком приложения.

Хотя он захватил Classes\Directory\shellex ключ для Registry.dat, ключевые записи указывают на CLSID, который не был захвачен. И даже если он захватил указанный CLSID, он указывает на путь, по которому устаревший установщик устанавливает приложение, а не на реальное место, где будет установлен AppX.


Подумывал зарегистрировать расширение самим приложением при первом запуске. Но место установки в C:\Program Files\WindowsApps имеет ограниченные разрешения, поэтому regsvr32 не выполняется.

Не удалось загрузить модуль C: \ Program Files \ WindowsApps \ WinSCP_5.14.0.0_x86__2dz6xbp7ps3z2 \ DragExt64.dll.

Убедитесь, что двоичный файл хранится по указанному пути, или выполните отладку, чтобы проверить наличие проблем с двоичными или зависимыми файлами .DLL.

В доступе отказано.


Однако разрешения позволяют копировать файл в другое место. Так что я мог скопировать .dll, например, в профиль пользователя (C:\Users\...) и зарегистрировать его оттуда. Но это оставит .dll позади, когда AppX будет удален.

Есть ли лучшее решение?


person Martin Prikryl    schedule 18.04.2018    source источник
comment
AFAIK Registring shell extensions требует изменения системного реестра, что невозможно в приложении Desktop Bridge, независимо от того, какой путь вы пройдете. Приложения Desktop Bridge изолированы, когда дело доходит до редактирования системного реестра.   -  person Mehrzad Chehraz    schedule 18.04.2018
comment
@MehrzadChehraz Да, это возможно. Но, возможно, есть альтернативный способ, например, для регистрации расширений файлов.   -  person Martin Prikryl    schedule 18.04.2018
comment
Здесь вы Вы можете обнаружить, что при записи в реестр вы пишете в локальный файл .dat, а не в реестр системы. Кроме того, regsvr32 требует прав администратора, в то время как приложения Desktop Bridge запускаются в контексте пользователя, а не от имени администратора.   -  person Mehrzad Chehraz    schedule 18.04.2018


Ответы (1)


Принцип разработки упакованных приложений Win32 в Windows 10 (приложения Desktop Bridge) заключается в том, что они декларативно интегрируются с оболочкой через appxmanifest (а не через реестр). Чтобы облегчить это, мы добавили в схему манифеста расширения Shell. Система будет запускать эти расширения вне процесса с оболочкой (в отличие от классических внутрипроцессных расширений), чтобы обеспечить плавное обновление приложений и предотвратить сбой приложений в оболочке Windows / проводнике.

См. Документацию здесь: https://docs.microsoft.com/en-us/windows/uwp/porting/desktop-to-uwp-extensions

ИЗМЕНИТЬ. Обратите внимание, что сегодня поддерживаются не все существующие расширения Shell. Чтобы помочь нам расставить приоритеты для тех, которые все еще отсутствуют, зарегистрируйте их на UserVoice: https://wpdev.uservoice.com/forums/110705-universal-windows-platform

person Stefan Wick MSFT    schedule 18.04.2018
comment
Спасибо за ваш ответ. Мое расширение оболочки реализует ICopyHook. Не похоже, что это поддерживается в расширениях Desktop Bridge. - person Martin Prikryl; 19.04.2018
comment
Да, это все еще в очереди для приложений Desktop Bridge. Я обновил свой ответ информацией о том, как вы можете помочь нам определить приоритеты расширений Shell, которые еще не поддерживаются в приложениях Desktop Bridge. - person Stefan Wick MSFT; 19.04.2018
comment
Чтобы помочь с тенденцией к раздуванию контекстного меню, я хотел бы иметь возможность переключать расширение. (с флажком в меню параметров приложения) Есть ли способ сделать это, не ограниченный для преобразованных приложений? - person jbcarpen; 25.04.2018