Подтвердить что ты не робот

Как связать приложение с прикрепленной программой на панели задач Windows 7?

У нас есть приложение, назовем его MyApp. При установке мы создаем значок рабочего стола для MyApp, который в основном вызывает MyLauncher.exe /launch MyApp.exe. MyLauncher делает некоторые полезные вещи (проверьте наличие обновлений и т.д.), А затем запускает MyApp.

MyApp on the Desktop

Пользователь с Windows 7 может захотеть привязать его к панели задач (например, правой кнопкой мыши на значке рабочего стола, "Pin to Taskbar" ):

MyApp on the Taskbar

Однако, поскольку ярлык указывает на MyLauncher, следующее происходит, когда пользователь запускает приложение (либо с помощью значка рабочего стола, либо на значке панели задач): MyLauncher выполняет свои действия, а затем запускает MyApp. На панели задач результат выглядит следующим образом:

MyApp twice on the Taskbar

Я понимаю, почему это происходит. Так как MyLauncher запускает MyApp, панель задач Windows 7 рассматривает их как два разных приложения.

Очевидно, что мой вопрос: Как разработчик MyLauncher и MyApp, могу ли я что-то сделать с этим?. Я бы хотел, чтобы панель задач Windows 7 "связывала" все экземпляры MyApp.exe с запуск ярлыка MyLauncher.exe /lauch MyApp.exe.

4b9b3361

Ответ 1

Попробуйте сыграть с "Идентификаторами приложений", См. Здесь для получения дополнительной информации: http://msdn.microsoft.com/en-us/library/windows/desktop/dd378459(v=vs.85).aspx

"Идентификаторы модели пользователей приложений (AppUserModelID) широко используются панелью задач в системах Windows 7 и более поздних версий для связывания процессов, файлов и окон с конкретным приложением. В некоторых случаях достаточно полагаться на внутренний присвоенный AppUserModelID к процессу системой. Однако для приложения, которое владеет несколькими процессами или приложением, работающим в хост-процессе, может потребоваться явно идентифицировать себя, чтобы он мог группировать свои иначе разрозненные окна под одной кнопкой панели задач и управлять содержимое этого списка переходов приложения."

Ответ 2

Одна вещь, которую вы можете сделать, - это не показывать значок панели задач для приложения вообще. В WPF это просто, как свойство:

ShowInTaskbar="False"

Проблема с этим подходом заключается в том, что это уменьшит удобство использования, потому что пользователь больше не может сказать, когда приложение работает, или легко выводит его на передний план, когда он теряется за другими окнами. Чтобы устранить некоторые из этих проблем, вы можете создать значок уведомления для этого приложения, который позволит задействовать некоторые из этих функций, а также дать пользователю некоторую обратную связь относительно текущего состояния приложения. (Запуск, не работает и т.д.)

Этот ресурс msdn имеет хороший пример кода о том, как создавать значки уведомлений в виде окон. Вы можете использовать тот же метод для приложений WPF.

enter image description here

МАЛЕНЬКИЙ СОВЕТ: Значки уведомлений - 16x16 пикселей. Попробуйте найти векторную версию значка до изменения размера, поскольку это даст вам более четкие результаты, потому что вы склонны терять много деталей такого размера.

Некоторое взаимодействие пользователя с значком уведомлений может включать в себя:

  • Двойной щелчок > Приносит приложение на передний план
  • Щелкните правой кнопкой мыши > Выводит контекстное меню с некоторыми вариантами. (I.E. Принесите фронт, закройте и т.д.)
  • Mouse-Over > Выводит подсказку с некоторой информацией о приложении.

Ответ 3

1)
Это скорее архитектурный вопрос/проблема - это немного необычный дизайн для таких целей,
то есть, если требуется обновление (я предполагаю, что у вас есть больше, но чтобы начать w/this), который обычно проверяется в приложении, то если обновление считается, что вы запускаете внешний процесс и обновляете приложение и т.д.
Launcher (как описано) имеет смысл, если вы запускаете много разных вещей или у вас есть общее решение или в более сложных случаях - например, у вас есть "хост-процесс", который загружает dll-ы, службы и т.д.
Таким образом, в основном вы столкнулись с проблемами из-за немного неудачного дизайна, решения - если у вас нет чего-то, что этого требует. Но если вы сказали, что не хотите перепроектировать...
2)
Вы все еще можете сделать "трюк" с помощью пусковой установки - и сделать вид простой работы вокруг...

  • Запустите сначала "MyApp -argument: check" (и на нем есть значок на рабочем столе, а не пусковая установка), и у него есть аргумент "fork" при запуске, и если "check" сделать небольшой "прокладочный" код, который lauches 'MyLauncher',
  • запустите программу запуска, чтобы сделать то, что она должна была делать - вы можете даже закрыть главный MyApp после запуска,
  • Когда запускается программа запуска, он снова запускает MyApp (или более сложный для закрытия, если он оставлен, только если требуется обновление и т.д.), но предыдущее проще), а также использовать другой аргумент или не использовать (в зависимости от того, что вы хотите и т.д.),
  • Вы снова выполняете двойное перенаправление процесса приложения-запуска app = > launcher = > ,
  • у вас не должно быть проблем с иконками таким образом,
  • со всем этим вы должны быть осторожны с предоставлением надлежащих манифестаций для любого приложения (чаще всего для запуска, которое требуется обновить, больше разрешений), если требуется режим "admin", но, я думаю, у вас есть это уже,

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