2012-03-15 1 views
17

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

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.

+0

На всякий случай это актуально: MyApp.exe на самом деле 'msaccess .exe MyVbaProject.mdb', следовательно, тег VBA. Приложение VBA активно использует (наши собственные) .net-библиотеки, следовательно, теги C# и .net. Решение на любом из этих языков прекрасно. Вызов Windows API также прекрасен. – Heinzi

+1

См. [Пакет обновления для Windows® API для Microsoft® .NET Framework] (http://archive.msdn.microsoft.com/WindowsAPICodePack) и [Проект кода: демонстрационное приложение Windows 7/VS2010] (http: //www.codeproject .com/Статьи/44393/Windows-7-VS2010-demo-app) – LarsTech

+0

Это может помочь http: // stackoverflow.com/questions/3648386/wpf-app-has-no-pin-to-taskbar-option – yuben

ответ

0

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

ShowInTaskbar="False"

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

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

enter image description here

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

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

  • Double-Click> Приносит приложение на передний
  • Щелчок правой кнопкой мыши> Воспитывает контекстное меню с некоторыми выборами. (I.E. Bring to front, close and etc ...)
  • Mouse-Over> Выдает подсказку с некоторой информацией о приложении.
3

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

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

+1

Если вы являетесь .NET-процессом, вам поможет код кода Windows API. –

0

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

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

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