afficher un formulaire windows à partir d'une fenêtre de service
je suis entrain de créer un service de fenêtre. mon exigence est la fenêtre d'affichage de formulaire à partir de la fenêtre de service NT sur l'intervalle particulier. Pour fins de test , je veux juste afficher le formulaire sur le démarrage du service:
protected override void OnStart(string[] args)
{
eventLog1.WriteEntry("In OnStart -before form show");
Messager_Form obj = new Messager_Form();
obj.Show();
//System.Diagnostics.Process.Start("calc.exe");
eventLog1.WriteEntry("In OnStart -after form show");
//timer1.Start();
}
il ne fonctionne pas. Ni formulaire est affiché, ni calc processus est en cours d'exécution. j'ai trouvé quelques liens
montrant pop up , mais la plupart d'entre eux suggérant WCF. n'est-il pas possible sans la wcf. quelqu'un peut-il me montrer le chemin pour y parvenir.
Vous ne devriez pas montrer de windows à partir d'un service. Les Services sont destinés à fonctionner sans interaction.
Vous devez marquer votre service de
Envisager d'écrire des messages dans le Journal des Événements. Utilisation du fichier de configuration pour l'activation/la désactivation de la journalisation dans le Journal des Événements.
je ne peux pas exécuter un processus distinct de service ?
Ouverture d'un tube nommé, un client (non-service) programme en cours d'exécution en arrière-plan et de regarder la pipe, c'est tout.
Vous devez marquer votre service de
Interact with desktop
Envisager d'écrire des messages dans le Journal des Événements. Utilisation du fichier de configuration pour l'activation/la désactivation de la journalisation dans le Journal des Événements.
je ne peux pas exécuter un processus distinct de service ?
Ouverture d'un tube nommé, un client (non-service) programme en cours d'exécution en arrière-plan et de regarder la pipe, c'est tout.
OriginalL'auteur Arshad | 2012-10-18
Vous devez vous connecter pour publier un commentaire.
Ne peut pas être fait*. Plus tard, les Systèmes d'Exploitation qui ne fonctionnent pas en tant que Services Windows sont interdits d'interagir avec l'ordinateur de Bureau au lieu de l'INTERFACE utilisateur, présenté par les Services de Windows est indiqué dans La Session 0, un spécial ouverture de session qui n'est normalement pas visible par l'utilisateur final.
Ce que vous devez faire est d'écrire un distinct application Windows Forms qui est toujours en cours d'exécution, mais pas toujours visible (éventuellement avoir cette application exécuter au démarrage et ont une icône dans la zone de notification) et communique avec le Service Windows en utilisant une certaine forme de CIB
Lorsque le Service Windows souhaite afficher une INTERFACE utilisateur pour l'utilisateur, il envoie un message à l'application, qui à son tour montre l'INTERFACE utilisateur souhaitée à l'utilisateur final.
**ou au moins il certainement ne devrait pas être fait*
Sauf qu'elle ne serait en cours d'exécution si quelqu'un était connecté. Vous avez besoin du service (pour faire le gros du travail, même si personne n'est connecté), et l'application de bureau pour faire des notifications à quiconque est connecté. Il fait plus de sens que de cette façon, surtout quand on considère multipe sessions - si plusieurs utilisateurs sont connectés, puis de l'utilisateur qui doit être affiché à l'INTERFACE utilisateur de ce service?
Le service pourrait envoyer le message à l'interface graphique de l'application (ou vice-versa) en utilisant WCF. WCF est plus récente version de la CIB.
OriginalL'auteur Justin
Je suis juste se référant à la réponse donnée dans un autre lien dans StackOverflow
Comment communiquer avec un service windows à partir d'une application qui interagit avec le bureau?
Réponse est :
Être conscient que si vous prévoyez éventuellement, de les déployer sur Windows Vista ou Windows Server 2008, de nombreuses façons que cela peut être fait aujourd'hui ne fonctionnera pas. C'est à cause de l'introduction d'une nouvelle fonction de sécurité appelée "Session 0 Isolement".
La plupart des services de windows ont été déplacés dans la Session 0 maintenant afin de bien les isoler du reste du système. Une extension de ce est le premier utilisateur à se connecter au système n'est plus placé dans la Session de #0, ils sont placés dans la Session 1. Et, par conséquent, la mesure d'isolement rompre code qui effectue certains types de communication entre les services et les applications de bureau.
La meilleure façon d'écrire le code d'aujourd'hui qui vont travailler sur Vista et Server 2008 aller de l'avant lors de la communication entre les services et les applications est d'utiliser un cross-process de l'API comme le RPC, les canaux Nommés, etc. Ne pas utiliser SendMessage/PostMessage comme qui va échouer dans la Session 0 Isolement.
http://www.microsoft.com/whdc/system/vista/services.mspx
Maintenant, compte tenu de vos besoins, vous allez être un peu d'un cornichon. Pour la croix-plate-forme concerne, je ne suis pas sûr si Remoting serait pris en charge. Vous pourriez avoir à descendre et aller tout le chemin du retour à sockets: http://msdn.microsoft.com/en-us/library/system.net.sockets.aspx
OriginalL'auteur Pradip
La vérification de la "Interagir avec le bureau" box fonctionne sur Windows NT, 2000, XP et 2003, mais grâce à La Session 0 Isolement ce paramètre ne fonctionne plus comme vous pouvez vous attendre dans Windows Vista et au-delà. Vous souhaitez réfléchir très attentivement avant de développer un service interactif...
OriginalL'auteur CoreTech