Как настроить ассоциацию файлов Microsoft Edge для открытия файлов .htm?

В своем программном обеспечении я использую ShellExecuteEx, чтобы открыть отчет, представленный в виде локального .htm файла. Иногда в некоторых системах конечных пользователей нет файловой ассоциации по умолчанию для файлов .htm.

Чтобы настроить такую ​​ассоциацию файлов в системе до Windows 10, я бы установил следующие разделы реестра для использования IE:

Key: HKEY_CURRENT_USER\Software\Classes\htm.file\Shell\open\Command
REG_SZ name: ""
REG_SZ value: "C:\Program Files (x86)\Internet Explorer\iexplore.exe" "%1"

Key: HKEY_CURRENT_USER\Software\Classes\.htm
REG_SZ name: ""
REG_SZ value: htm.file

Key: HKEY_CURRENT_USER\Software\Classes\.htm
REG_SZ name: PerceivedType
REG_SZ value: Document

Затем я уведомляю Windows Explorer об изменении:

SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, NULL, NULL);

Это работает хорошо, но как сделать то же самое для Microsoft Edge в Windows 10?

PS.:
Я не хочу использовать IE там, потому что он всегда показывает дополнительную вкладку с клячкой для переключения на Edge, что очень сбивает с толку моих конечных пользователей.


person c00000fd    schedule 17.10.2018    source источник
comment
Вместо этого вы можете запустить Edge с html-файлом в качестве параметра.   -  person bolov    schedule 17.10.2018
comment
Возможно, ваше программное обеспечение изменяет ассоциации пользователей, это плохая идея. Вероятно, ваша программа нанесет вред некоторым пользователям. Я был бы склонен обнаружить сбой ShellExecuteEx, а затем напрямую открыть Edge. Конечно, Edge может и не быть.   -  person David Heffernan    schedule 17.10.2018
comment
Windows 10 не позволяет приложениям произвольно изменять ассоциации файлов. Это должно быть сделано пользователем через настройки. Если вам нужны доказательства, установите Google Chrome в системе Windows 10, где он не был установлен ранее, и сообщите установщику, что хотите установить Chrome в качестве браузера по умолчанию; при этом он открывает соответствующую страницу настроек, чтобы вы могли сделать это самостоятельно. Кроме того, я только что участвовал в ручной миграции более 25 систем с Windows 7 на Windows 10 Корпоративная, включая несколько новых установок, и ни в одной из них не было пропущено сопоставление .htm.   -  person Ken White    schedule 17.10.2018
comment
@KenWhite: надеюсь, ты прав. Потому что очень неприятно иметь дело с отсутствующими ассоциациями файлов для основных расширений, таких как .htm. Хотя, обратите внимание, я не говорю об изменении веб-браузера по умолчанию. Речь идет об открытии локального файла с локальным путем, который имеет расширение .htm. PS. Возвращаясь к тому, что вы описали, я думаю, что антимонопольный иск в конце 90-х ничему не научил MS. ха.   -  person c00000fd    schedule 17.10.2018
comment
Windows 10 не позволяет приложениям произвольно изменять ассоциации файлов. На самом деле, Рэймонд Чен вчера написал об этом в блоге: Почему Windows просит меня выбрать программу для открытия файла, даже если я уже указал, какую программу я хочу использовать для открытия файла?   -  person Remy Lebeau    schedule 17.10.2018
comment
@DavidHeffernan: Хотел бы я, чтобы это было так просто. ShellExecute — комок боли. Он может возвращать, а иногда и не возвращать код ошибки. Я даже не могу его воспроизвести сообщение об ошибке, которое я получил в отчете. Кроме того, если нет никаких ассоциаций, он возвращает успех и вместо этого показывает это всплывающее окно, и нет никакого способа зная, что пользователь выбрал или не выбрал там из моего приложения. Или, что еще хуже, это может быть на Win7.   -  person c00000fd    schedule 17.10.2018
comment
@RemyLebeau: Ого, вчерашняя статья. Я не знал, что он все еще пишет их! Довольно удачное время с моей стороны, ха :)   -  person c00000fd    schedule 17.10.2018
comment
На вашем месте я бы переложил ответственность на пользователя, чтобы исправить свои ассоциации. Иногда лучший способ решить проблему - передать ее пользователю!! Ты. Просто нельзя ожидать, чтобы иметь дело с этим. Объясните своему пользователю, что ему нужно настроить машину и приступить к реальной работе.   -  person David Heffernan    schedule 18.10.2018
comment
@ c00000fd он по-прежнему очень часто пишет новые сообщения в блоге, по крайней мере, несколько раз в неделю, а много раз даже ежедневно.   -  person Remy Lebeau    schedule 18.10.2018
comment
@DavidHeffernan: Если бы мои конечные пользователи были похожи на пользователей SO, у меня не было бы никаких проблем, чтобы сделать то, что вы предложили. К сожалению, это не так. Кроме того, нет надежного способа узнать, завершится ли ShellExecute ошибкой или вернет успех и вместо этого отобразит то собственное окно выбора приложений, которое я показал выше. И когда конечный пользователь ожидает увидеть отчет (из моего приложения), это может его сильно сбить с толку. Как и в этом случае, я получил электронное письмо в службу поддержки, в котором говорилось, что отчеты не работают. В этом случае ShellExecute вернул ERROR_NO_ASSOCIATION, которую мое приложение отобразило как ошибку MsgBox.   -  person c00000fd    schedule 18.10.2018
comment
К сожалению, есть еще куча кодов ошибок, которые он может вернуть, если нет ассоциации файлов. (Как я узнал во время вчерашнего тестирования.)   -  person c00000fd    schedule 18.10.2018
comment
@RemyLebeau: Вы знаете, это забавно. Я читал его блог в начале 2000-х, когда изучал Win32. Но я даже не знаю, как этот чувак выглядит. Обычно персонажи РС довольно заметны: например. Марк Руссинович есть во всей сети. Что-то мне подсказывает, что он довольно древний. Нет аккаунта в твиттере или ютубе. На SO есть кто-то с таким именем, но нет никакого способа проверить, действительно ли это он.   -  person c00000fd    schedule 18.10.2018
comment
Да, это он.   -  person David Heffernan    schedule 18.10.2018
comment
@ c00000fd да, это тот же парень. И его изображения довольно легко найти. Я просто погуглил его и нашел несколько видеороликов разработчиков Microsoft с ним.   -  person Remy Lebeau    schedule 18.10.2018
comment
Что бы это ни стоило, вы можете помочь конечному пользователю сделать это самостоятельно с помощью разных трюков, в зависимости от версии Windows: stackoverflow.com /a/52198802/403671 Используя автоматизацию пользовательского интерфейса, я думаю, можно даже визуально изменить ассоциации, но я не зашел так далеко.   -  person Simon Mourier    schedule 18.10.2018


Ответы (1)


В Windows 10 это делается с помощью IApplicationAssociationRegistrationInternal ("2a848e25-d688-4aa3-8e55-0c16cb3a2dfb").

создано с помощью SHCreateAssociationRegistration

Установите "AppX4hxtad77fbk3jkkeerkrm0ze94wjf3s9" для Microsoft Edge ProgId.

(проверено на Windows 10–1803, 17134.820)

person Castorix    schedule 15.06.2019