Файл.NET app.config, содержащий useLegacyV2RuntimeActivationPolicy, не используется при запуске приложения через сопоставление файлов

Моему приложению нужно использовать useLegacyV2RuntimeActivationPolicy в его.exe.config, потому что это приложение CLR4, использующее сборки CLR2 в смешанном режиме.

Все хорошо, когда мы запускаем наше приложение из меню "Пуск", но если пользователь запускает наше приложение, нажимая на один из своих файлов, который связан с типом файлов нашего приложения, файл app.config не читается, и загрузка этих Сборки CLR2 не удается.

Судя по дальнейшим исследованиям, ShellExecute не читает файл.config (даже если указана папка приложения), а WinExec -. Я предполагаю, что оболочка использует ShellExecute для запуска приложения через сопоставление файлов.

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

Заранее спасибо!

1 ответ

Решение

Убедитесь, что в настройках реестра ассоциации файлов используются длинные имена файлов, а не короткие имена файлов. Например, command Значение здесь должно использовать длинное имя файла, чтобы открыть документ.

HKEY_CLASSES_ROOT\MyFile.Document\shell\open\command

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

Изменить: я подтвердил свою теорию, переименовав app.config с подходящим коротким именем, найденным в реестре, и тогда это сработало. Удаление переименованного файла app.config снова нарушает его.

Другие вопросы по тегам