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

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

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

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

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

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

1 Ответ

0 голосов
/ 15 декабря 2011

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

HKEY_CLASSES_ROOT\MyFile.Document\shell\open\command

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

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

...