Запретить загрузку всех несистемных расширений оболочки в GetOpenFileName, CFileDialog, IFileOpenDialog и т. д.

Я ищу программный способ запросить у пользователя имена файлов с помощью оболочки проводника, и мне нужны только загруженные расширения системной оболочки.

Причина, по которой я ищу эту функцию, заключается в том, что я хочу исключить стороннее расширение оболочки как возможную причину сбоев и другого недетерминированного поведения.

В идеале где-то есть флаг, который я пропустил, чтобы я мог передать его функции, что означает что-то вроде «безопасного режима» для экземпляра проводника, где он загружает только расширения системной оболочки. Это кажется такой важной функцией, и я потратил много времени на изучение документов, чтобы найти ее безрезультатно.

Я просмотрел документы API для CFileDialog, GetOpenFileName и IFileOpenDialog. Похоже, что единственный способ предотвратить загрузку несистемных расширений оболочки — это выполнить какой-то глобальный взлом через изменение реестра или использование программных утилит. Ни один из них не является удовлетворительным для приложений с хорошим поведением.

Я знаю, что могу использовать файловые диалоги «старого стиля», которые не основаны на проводнике, но мои пользователи убьют меня, если я навяжу им это. :)

Единственный способ, который я могу придумать, - это (тьфу) заново изобрести колесо и написать диалог открытия файла, похожий на проводник.


person Tim Finer    schedule 01.05.2012    source источник
comment
Что, если им нужно стороннее расширение для доступа к нужному файлу?   -  person Deanna    schedule 01.05.2012
comment
Честная оценка. Я не думаю, что они стоят того, чтобы рисковать крахом. Особенно, когда кажется, что это ваше приложение вызвало сбой. Я бы скорее сказал пользователям, что приложение не поддерживает расширения оболочки, чем объяснил, что их расширение оболочки вызвало сбой, который привел к потере всей их работы... Я хотел бы выбрать этот компромисс соответствующим образом для своего приложения.   -  person Tim Finer    schedule 08.05.2012
comment
Мне любопытно, разобрались ли вы когда-нибудь с этим. Я столкнулся с той же проблемой   -  person cppguy    schedule 18.05.2012
comment
@cppguy Нет. Кроме того, что вы катите свои собственные, вздохните. Это действительно поражает меня, что теперь есть способ сделать это. Риск вредоносного ПО значительно снизился бы, если бы я мог просто попросить обозреватель безопасного режима.   -  person Tim Finer    schedule 20.05.2012