.Net app.config файл, содержащий uselegacyv2runtimeactivationpolicy, не используется при запуске приложения через Ассоциацию файлов

StackOverflow https://stackoverflow.com/questions/4852646

  •  27-10-2019
  •  | 
  •  

Вопрос

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

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

Основываясь на дальнейших исследованиях, кажется, что Shellexecute не читает файл .config (даже если указана папка приложения), но Winexec делает. Я предполагаю, что Shell использует Shellexecute для запуска приложения через ассоциацию файлов.

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

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

Это было полезно?

Решение

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

HKEY_CLASSES_ROOT\MyFile.Document\shell\open\command

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

РЕДАКТИРОВАТЬ: Я подтвердил свою теорию, переименовав App.config с соответствующим коротким названием, найденным в реестре, а затем сработало. Удаление переименованного файла app.config снова сломает его.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top