Приложение ведет себя по-разному при запуске, используя связанный файл

362
HotN

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

Вот методы запуска, которые я пробовал, и получающееся в результате поведение:

  1. Дважды щелкните связанный файл в проводнике:

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

  2. Перетащите связанный файл в исполняемый файл приложения в проводнике:

    Приложение открывается на правильном дисплее и ведет себя нормально.

  3. Запустите приложение из командной строки, выполнив name_of_application.exe "file_to_open":

    Приложение открывается на правильном дисплее и ведет себя нормально.

  4. Щелкните правой кнопкой мыши соответствующий файл в проводнике и выберите «Открыть с помощью ...». Перейдите к установленному приложению и выберите его:

    Сначала вообще ничего не происходит. Затем примерно через 5 минут приложение открывается на правильном дисплее и ведет себя нормально. После этого повторное открытие того же связанного файла приводит к тому же поведению, описанному в методах 1-3, еще раз в зависимости от того, как файл открывается.

Я не уверен, имеет ли это значение, но это приложение .NET, написанное с использованием инфраструктуры WPF, предназначенной для .NET 4.7.2. Это 64-битное приложение. Код запрашивает основной монитор из .NET, который соответствует настройкам отображения системы пользователя.

Я проверил соответствующие записи реестра для ассоциации файлов, и ничто не кажется необычным. Смотрите следующие снимки экрана (связанный тип файла .sejs):

Тип файла ассоциации в реестре

Ассоциация приложений в реестре

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

Я также попытался восстановить программу установки, восстановить установку и перезагрузить компьютер.

Это приводит меня к паре вопросов:

  1. Что может заставить Windows открывать приложение на разных мониторах в зависимости от того, как соответствующий файл отправляется в приложение?
  2. Что может вызвать длительную задержку при открытии приложения в Windows, если я открываю его во время повторного связывания файла с ним?
0
Просьба уточнить в своем посте различные сценарии и их результаты, на данный момент все перемешано. harrymc 6 лет назад 0
@harrymc Да, я думаю, это немного запуталось. Извини за это. Я переписал пост, который, надеюсь, прояснит ситуацию. HotN 6 лет назад 0

1 ответ на вопрос

0
harrymc

Описанный вами эффект во многом зависит от системного вызова, запускающего файл. Вызов Windows API для выполнения программы имеет много параметров, поэтому все зависит от программиста Microsoft.

Такие различия распространены в Windows, которая имеет огромную базу кода, написанную многими программистами. Нужно изучить различия и адаптироваться, так как Windows - это закрытая система. Вы / мы не можем «починить» Windows.

Не могли бы вы подробнее остановиться на том, что «все зависит от программиста Microsoft, о котором идет речь»? Я являюсь разработчиком запускаемого приложения, но, насколько может судить код, двойной щелчок по связанному файлу вместо перетаскивания файла на исполняемый файл приводит к запуску приложения только с одним аргументом запуска, предоставленным Windows, которая является путем к файлу. Насколько приложение может сказать, оба метода запуска идентичны. HotN 6 лет назад 0
В этом случае нормально иметь только один параметр. Мой ответ касался выбора монитора, на котором произошел дисплей. Что касается 5-минутной задержки, это проблема вашего приложения, которую может решить только вы. Я никогда не сталкивался с такой проблемой, за исключением случаев, когда упоминались несуществующие URL или сетевые ресурсы. harrymc 6 лет назад 0