Приложение WinForms, порождающее Windows Photo Viewer, влияет на шрифты в оригинальном приложении
У нас есть приложение WinForms для настольных компьютеров, работающее в Windows 7 с размером шрифта на рабочем столе 150%. Мы используем Process.Start() для запуска программы просмотра для отображения документов, хранящихся в нашей базе данных. При просмотре фотографии запускается программа просмотра фотографий Windows. Когда это происходит, многие шрифты в приложении меняются. Шрифты меню особенно пострадали. Я предполагаю, что это как-то связано с обработкой высокого DPI в библиотеке WinForms. Тем не менее, я удивлен, что запуск Windows Photo Viewer приведет к изменению рабочего стола, что повлияет на приложение. Настройки 125% или 175% не имеют этого эффекта.
Есть ли какой-нибудь способ изолировать наше приложение, когда оно будет запущено таким образом?
1 ответ
Как и вы, наше приложение хранит файлы в нашей базе данных. Когда пользователям необходимо просмотреть файл, программа извлекает его из базы данных и сохраняет на локальный диск. После сохранения он открывает файл с помощью вызова ShellExecute.
У меня возникла та же проблема с jpgs, настроенными на открытие в средстве просмотра фотографий Windows, когда для шрифтов установлено более 100% в Windows 7. В моих тестах это влияет ТОЛЬКО на вызывающее приложение. Приложение не затрагивается при открытии того же jpg из Windows Explorer или Start | Запустить.
Исходя из этого и потратив много часов на поиски решения, я, наконец, остановился на этом "хаке", чтобы обойти проблему. Я создал отдельный EXE, который открывает только файл, переданный в качестве параметра. Затем я изменил свое основное приложение с открытия JPG на запуск этого нового EXE-файла с расположением файла jpg в качестве параметра. Теперь новый EXE-файл - это "оригинальное приложение" вместо моего основного приложения, поэтому мое основное приложение не затронуто.