Добрый день! Есть приложение, которое висит в трее. Управление работой — старт/стоп/статистика... — осуществляется из контекстного меню по правой кнопке на иконке. Всё прекрасно работает, но...!!! Через 1-2-3 недели (по-разному) иконка из трея ИСЧЕЗАЕТ!!! Потому приходится — например для обновления версии программы — сначала убить её из диспетчера задач, а уж потом обновлять. Самый большой минус такого способа — теряется статистика, режимы работы и т.д. Да, можно это всё сохранять в логе, но, по некоторым причинам, это не выход. Система ХР, в настройках свойств панели задач галочка "Скрывать неиспользуемые значки" убрана. Пробовал её поставить и на иконке приложения включить "Показывать всегда" — не помогает. Вопрос — где иконка???
Здравствуйте, xlich, Вы писали:
X>Вопрос — где иконка???
Сколько уж работаю с треем, никогда такого не видел, и никто никогда не жаловался.
Гипотеза: само приложение где-то убирает её из трея. Рекомендация: поставить отладочный вывод в лог точки деинициализации иконки из трея. В крайнем случае: перехватить Shell_NotifyIcon и посмотреть, кто зовёт.
Хотя не, вот сейчас вспомнил один случай, когда иконка не появлялась при установке: я внедрялся в таскбар, одновременно устанавливал иконку, так как моё окно было "занято", оно подсаживало родителя, а вместе с ним и весь таскбар, т.о. трей просто не мог отреагировать на запрос, так как был занят Порешалось потоками. Может это наведёт на какую полезную мысль
Здравствуйте, xlich, Вы писали:
X>Добрый день! Есть приложение, которое висит в трее. Управление работой — старт/стоп/статистика... — осуществляется из контекстного меню по правой кнопке на иконке. Всё прекрасно работает, но...!!! Через 1-2-3 недели (по-разному) иконка из трея ИСЧЕЗАЕТ!!! Потому приходится — например для обновления версии программы — сначала убить её из диспетчера задач, а уж потом обновлять. Самый большой минус такого способа — теряется статистика, режимы работы и т.д. Да, можно это всё сохранять в логе, но, по некоторым причинам, это не выход. Система ХР, в настройках свойств панели задач галочка "Скрывать неиспользуемые значки" убрана. Пробовал её поставить и на иконке приложения включить "Показывать всегда" — не помогает. Вопрос — где иконка???
Здравствуйте, xlich, Вы писали:
O>>Очевидное спрошу — а сообщение "TaskbarCreated" вы обрабатываете ?
X>Я извиняюсь — а что это???
Explorer.exe рассылает это сообщение всем top-level окнам при запуске, когда панель задач
проинициализирована и ей можно пользоваться. Типичный сценарий: explorer.exe по каким-то
причинам был завершен, а затем запущен заново: все иконки из трея пропадают, но те,
кто был подписан на "TaskbarCreated", смогут восстановить их.
Здравствуйте, okman, Вы писали:
O>Explorer.exe рассылает это сообщение всем top-level окнам при запуске, когда панель задач O>проинициализирована и ей можно пользоваться. Типичный сценарий: explorer.exe по каким-то O>причинам был завершен, а затем запущен заново: все иконки из трея пропадают, но те, O>кто был подписан на "TaskbarCreated", смогут восстановить их.
O>Подробнее здесь:
O>The Taskbar (MSDN) O>http://msdn.microsoft.com/en-us/library/windows/desktop/cc144179%28v=vs.85%29.aspx
Хм... Не знал, т.к. не сталкивался. Переписал код по рекомендациям МСДН, обновил программу, буду ждать результата. Спасибо! Как здесь оценить качество ответа? По-моему, +5 — это справедливо
Здравствуйте, saf_e, Вы писали:
_>У нас была подобная проблема, но на более новых системах, полечили http://msdn.microsoft.com/en-us/library/windows/desktop/bb773352(v=vs.85).aspx добавлением guidItem.
А на кой кстати нужен этот GUID? Чего он дает? В MSDN как-то об этом невнятно написано. Для чего он нужен системе?
Здравствуйте, Carc, Вы писали:
C>Здравствуйте, saf_e, Вы писали:
_>>У нас была подобная проблема, но на более новых системах, полечили http://msdn.microsoft.com/en-us/library/windows/desktop/bb773352(v=vs.85).aspx добавлением guidItem. C>А на кой кстати нужен этот GUID? Чего он дает? В MSDN как-то об этом невнятно написано. Для чего он нужен системе?
Чтобы однозначно идентифицировать иконку. Как я понимаю для икон-менеджера (т.е. показывать/не показывать, скрывать оповещения и т.п.).
Основной кейс, как я думаю это для програм имееющих больше одной иконки в трее, но в нашем случае был какой-то затык на одной из машин и логика работала не корректно, пришлось добавить.
_>Чтобы однозначно идентифицировать иконку. Как я понимаю для икон-менеджера (т.е. показывать/не показывать, скрывать оповещения и т.п.).
О-как. Не знал. Век живи — век учись! Спасибо!
А как тогда будет себя вести icon-менеджер если иконка у софтины одна, и гуид там и вовсе не указывается? Есть какие-то мысли на эту тему? Опыт?
_>Основной кейс, как я думаю это для програм имееющих больше одной иконки в трее, но в нашем случае был какой-то затык на одной из машин и логика работала не корректно, пришлось добавить.
А если не секрет, в чем логика сбивалась (ну если кроме того что иконку прятал менеджер)?
Здравствуйте, Carc, Вы писали:
C>Здравствуйте, saf_e, Вы писали:
_>>Чтобы однозначно идентифицировать иконку. Как я понимаю для икон-менеджера (т.е. показывать/не показывать, скрывать оповещения и т.п.). C>О-как. Не знал. Век живи — век учись! Спасибо! C>А как тогда будет себя вести icon-менеджер если иконка у софтины одна, и гуид там и вовсе не указывается? Есть какие-то мысли на эту тему? Опыт?
Так же как и до Vista/7, как я подозреваю использует имя процесса (путь?).
_>>Основной кейс, как я думаю это для програм имееющих больше одной иконки в трее, но в нашем случае был какой-то затык на одной из машин и логика работала не корректно, пришлось добавить. C>А если не секрет, в чем логика сбивалась (ну если кроме того что иконку прятал менеджер)?
Тикет имплементил не я, поэтому глубоко я в него не закапывался. Возможно терялась нотификация от иконки тоже.
Это был какой-то вырожденный кейс, репро был очень редкий.
Здравствуйте, okman, Вы писали:
O>Explorer.exe рассылает это сообщение всем top-level окнам при запуске, когда панель задач O>проинициализирована и ей можно пользоваться. Типичный сценарий: explorer.exe по каким-то O>причинам был завершен, а затем запущен заново: все иконки из трея пропадают, но те, O>кто был подписан на "TaskbarCreated", смогут восстановить их.
O>Подробнее здесь:
O>The Taskbar (MSDN) O>http://msdn.microsoft.com/en-us/library/windows/desktop/cc144179%28v=vs.85%29.aspx
Именно так и случилось!!!! Прошло три недели и есть результат. Я запустил 2 версии — с исправлениями и без и, чтобы не путаться, немного изменил название исполняемого файла. Контролировал каждый день. И вот сегодня свершилось!!! Иконка у "старой" версии исчезла, а с исправлениями — нет. Так что — ещё раз спасибо!!!
Здравствуйте, xlich, Вы писали:
X>Именно так и случилось!!!! Прошло три недели и есть результат. Я запустил 2 версии — с исправлениями и без и, чтобы не путаться, немного изменил название исполняемого файла. Контролировал каждый день. И вот сегодня свершилось!!! Иконка у "старой" версии исчезла, а с исправлениями — нет. Так что — ещё раз спасибо!!!
Вот это я понимаю тестер! В виртуалке гебернейт и перевести часы это не наше. Только хардкор!
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Здравствуйте, Vain, Вы писали:
X>>Именно так и случилось!!!! Прошло три недели и есть результат. Я запустил 2 версии — с исправлениями и без и, чтобы не путаться, немного изменил название исполняемого файла. Контролировал каждый день. И вот сегодня свершилось!!! Иконка у "старой" версии исчезла, а с исправлениями — нет. Так что — ещё раз спасибо!!! V>Вот это я понимаю тестер! В виртуалке гебернейт и перевести часы это не наше. Только хардкор!
Так у него после трехнедельного аптайма глюк поймался. А какой аптайм будет у системы в гибернейте?
Здравствуйте, xlich, Вы писали:
X>Именно так и случилось!!!! Прошло три недели и есть результат. Я запустил 2 версии — с исправлениями и без и, чтобы не путаться, немного изменил название исполняемого файла. Контролировал каждый день. И вот сегодня свершилось!!! Иконка у "старой" версии исчезла, а с исправлениями — нет. Так что — ещё раз спасибо!!!
Здравствуйте, Marty, Вы писали:
V>>Вот это я понимаю тестер! В виртуалке гебернейт и перевести часы это не наше. Только хардкор! M>Так у него после трехнедельного аптайма глюк поймался. А какой аптайм будет у системы в гибернейте?
а чему там аптаймиться?
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Здравствуйте, Vain, Вы писали:
V>>>Вот это я понимаю тестер! В виртуалке гебернейт и перевести часы это не наше. Только хардкор! M>>Так у него после трехнедельного аптайма глюк поймался. А какой аптайм будет у системы в гибернейте? V>а чему там аптаймиться?
Ну, как я понял, у него система три недели честно пахала, и кто-то повалил explorer, который перезапустился. Как тут гибернейт поможет — я
Хотя, можно было просто для начала убить эксплорер и запустить его заново, и посмотреть, как работает. Но удостоверится, что проблема была именно в этом, не поможет.
Здравствуйте, Marty, Вы писали:
V>>а чему там аптаймиться? M>Ну, как я понял, у него система три недели честно пахала, и кто-то повалил explorer, который перезапустился. Как тут гибернейт поможет — я M>Хотя, можно было просто для начала убить эксплорер и запустить его заново, и посмотреть, как работает. Но удостоверится, что проблема была именно в этом, не поможет.
я не понимаю только причём здесь относительное время работы приложения
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Здравствуйте, Vain, Вы писали:
M>>Ну, как я понял, у него система три недели честно пахала, и кто-то повалил explorer, который перезапустился. Как тут гибернейт поможет — я M>>Хотя, можно было просто для начала убить эксплорер и запустить его заново, и посмотреть, как работает. Но удостоверится, что проблема была именно в этом, не поможет. V>я не понимаю только причём здесь относительное время работы приложения
А я не понимаю, из какого пальца ты высосал относительность времени. ТС врооде писал об абсолютной величине, примерно равной 3*7*24*60 минут