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

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

MyApp on the Desktop

Пользователь с Windows 7 может захотеть прикрепить его к панели задач (т.е., правая кнопка мыши на значке на рабочем столе «Закрепить на панели задач»):

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.

Ответы [ 3 ]

3 голосов
/ 21 марта 2012

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

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

0 голосов
/ 23 марта 2012

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

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

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

0 голосов
/ 21 марта 2012

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

ShowInTaskbar="False"

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

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

enter image description here

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

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

  • Двойной щелчок> Вывод приложения на передний план
  • Правый щелчок> Вызов контекстного меню с некоторыми вариантами выбора.(То есть вывод на передний план, закрытие и т. Д.) *
  • При наведении курсора> Выводит всплывающую подсказку с некоторой информацией о приложении.
...