#com #windows-10 #toast
#com #windows-10 #тост
Вопрос:
Я внедряю Windows 10 Toast на C # Desktop (используя эту библиотеку в качестве оболочки: https://github.com/emoacht/DesktopToast /).
Все работает, как ожидалось, за исключением того, что, когда я отвечаю на всплывающее уведомление, когда моя программа не запущена, она запустит мою программу, но затем принудительно завершит ее через некоторое время. Я НЕ хочу, чтобы она была завершена!
Я замечаю, что Windows запускает мою программу с -Embedding
помощью командной строки, что, как я понимаю, связано с некоторой автоматизацией COM / OLE. Я предполагаю, что ответ на Toast основан на вызове моего приложения в качестве COM-сервера, вопрос в том, как мне остановить его завершение?
Комментарии:
1. Когда сервер вне процесса запускается с помощью COM, он должен как можно быстрее вызвать CoRegisterClassObject, чтобы сообщить миру во время выполнения, какие у него есть COM-объекты (обратите внимание, что это отличается от регистрации классов в реестре). Я не вижу этого в этой библиотеке. Например, она должна вызываться для объектов, реализующих INotificationActivationCallback. Здесь у вас есть пример: github.com/windows-toolkit/WindowsCommunityToolkit/blob/master /…
2. @SimonMourier Он использует библиотеку переноса, которая приводит к тому же вызову (по крайней мере, в соответствии с MS): github.com/microsoft/referencesource/blob /. … Это вызывается отсюда: github.com/emoacht/DesktopToast/blob /. … (Почему он утверждает, что ссылки markdown работают в комментариях? Они явно не …)
3. Вы правы, этого не видели. И вы вызываете этот метод (с успехом)? Кажется, это продемонстрировано только в примере WPF.
4. Да, он вызывается и возвращается без ошибок. На данный момент я решил эту проблему, просто обнаружив
-Embedding
командную строку и повторно запустив свою программу вне контроля родительского процесса, поэтому он не может ее завершить. Но я хотел бы знать, каково ожидаемое поведение здесь.5. pinvoke.net/default.aspx/ole32/CoAddRefServerProcess.html