2010-10-07 9 views
1

Bonjour J'ai une application de service Windows s'exécutant sur les ordinateurs locaux des utilisateurs. J'ai aussi une application de mise à jour de l'application qui est invoquée par le service pour vérifier s'il existe des mises à jour disponibles. S'il y a alors je voudrais faire apparaître une notification sur la barre des tâches pour informer l'utilisateur qu'il existe des mises à jour disponibles. L'utilisateur peut cliquer sur l'icône de notification et démarrer le processus de mise à jour qui arrêtera le service, installera les mises à jour et redémarrera l'application.Comment démarrer une icône de notification

Ma question est comment puis-je obtenir l'icône de notification à apparaître sur le bureau. J'ai essayé d'obtenir le programme de mise à jour pour faire apparaître l'icône, mais depuis que le service Windows démarre le programme de mise à jour, le programme de mise à jour fonctionne sous Utilisateur du système et ne peut donc pas ouvrir les interfaces utilisateur. Quelqu'un peut-il suggérer une solution s'il vous plaît?

Répondre

1

Vous ne mentionnez pas quelle langue vous utilisez pour développer votre application, donc la réponse peut varier légèrement. Fondamentalement, les services Windows ne peuvent pas interagir directement avec l'utilisateur connecté, car ils s'exécutent dans un autre WindowStation. This page on MSDN décrit certaines techniques courantes pour réaliser l'interaction de l'interface utilisateur à partir d'un service Windows; la plupart d'entre eux impliquent l'appel de code non-géré.

En particulier, je vous suggère d'appeler CreateProcessAsUser à partir de votre service pour lancer une application distincte qui s'exécute dans le contexte de l'utilisateur et affiche l'icône dans la zone de notification. Si votre application d'interface utilisateur doit échanger des informations avec le service en cours d'exécution, vous devez implémenter une sorte de IPC, tels que les canaux nommés.

+0

J'utilise .Net C# – Amitesh

+0

Dans ce cas, vous pouvez appeler CreateProcessAsUser en utilisant P/Invoke et faire comme je l'ai décrit ci-dessus. Ça devrait marcher. – CesarGon