У меня есть собственное приложение для Windows, которое неожиданно ведет себя по-разному в системе с несколькими мониторами, в зависимости от того, как оно было запущено. Я ожидаю, что он должен вести себя одинаково для каждого метода запуска. Каждый метод включает в себя открытие файла, который был связан с приложением.
Вот методы запуска, которые я пробовал, и получающееся в результате поведение:
Дважды щелкните связанный файл в проводнике:
Приложение запускается, но пользовательский интерфейс открывается на любом мониторе, который включен, а не на основном дисплее, как было написано ранее. Части пользовательского интерфейса также отсутствуют при попытке взаимодействия с приложением.
Перетащите связанный файл в исполняемый файл приложения в проводнике:
Приложение открывается на правильном дисплее и ведет себя нормально.
Запустите приложение из командной строки, запустив
name_of_application.exe "file_to_open"
:Приложение открывается на правильном дисплее и ведет себя нормально.
Щелкните правой кнопкой мыши соответствующий файл в проводнике и выберите «Открыть с помощью ...». Перейдите к установленному приложению и выберите его:
Сначала вообще ничего не происходит. Затем примерно через 5 минут приложение открывается на правильном дисплее и ведет себя нормально. После этого повторное открытие того же связанного файла приводит к тому же поведению, описанному в методах 1-3, еще раз в зависимости от того, как файл открывается.
Я не уверен, имеет ли это значение, но это приложение .NET, написанное с использованием инфраструктуры WPF, предназначенной для .NET 4.7.2 Это 64-битное приложение. Код запрашивает основной монитор из .NET, который соответствует настройкам отображения системы пользователя.
Я проверил соответствующие записи реестра для ассоциации файлов, и ничто не кажется необычным. Смотрите следующие снимки экрана (связанный тип файла .sejs):
Я также попытался удалить значение «Command», показанное на втором изображении, из реестра, что никак не повлияло. Насколько я могу судить, нет ничего необычного в этой ассоциации файлов, которая бы вызывала такое поведение.
Я также попытался восстановить программу установки, восстановить установку и перезагрузить компьютер.
Это приводит меня к паре вопросов:
- Что может заставить Windows открывать приложение на разных мониторах в зависимости от того, как соответствующий файл отправляется в приложение?
- Что может вызвать длительную задержку при открытии приложения в Windows, если я открываю его во время повторного связывания файла с ним?
Ответы:
Описанный вами эффект во многом зависит от системного вызова, запускающего файл. Вызов Windows API для выполнения программы имеет много параметров, так что все зависит от программиста Microsoft, о котором идет речь.
Такие различия распространены в Windows, которая имеет огромную базу кода написано многими программистами. Нужно учиться различия и адаптироваться, так как Windows это закрытая система. Вы / мы не можем «починить» Windows.
источник