2009-12-08 4 views
1

Comment savoir si une application .Net s'exécute en tant qu'application Desktop ou en tant que service?Dire si une application .Net est en cours d'exécution en tant que service ou application?

Nous essayons de tester notre application avec Fitnesse, qui charge l'application en tant que service puis fait des appels dedans .. mais quand une boîte d'erreur modale est poussée alors elle explose .. Je veux mettre un chèque à voir si elle est en cours d'exécution dans un service et si c'est le cas, je veux lancer une exception à la place, donc notre test échouera.

Existe-t-il un moyen de le faire, autre que de passer un paramètre à quelque part disant qu'il a été démarré par FitNesse?

Répondre

5

Si vous voulez juste déterminer pour montrer si oui ou non un contrôle de l'interface utilisateur, vous pouvez utiliser:

if(Environment.UserInteractive) 
{ 
    // Show UI 
} 
+1

+1 pour une solution plus simple que l'inspection du type d'assemblage. –

+0

Vous ne savez pas quelle est la différence, mais Form.ShowDialog utilise SystemInformation.UserInteractive pour effectuer la même vérification. –

+0

A en juger par la sortie Reflector, deux personnes différentes ont écrit Environment.UserInteractive et SystemInformation.UserInteractive en utilisant la même API sous-jacente (GetUserObjectInformation) mais sans regarder le code de l'autre. –

0

Je pense que cela ne fonctionnera (pas d'endroit pratique pour tester mon code air):

// requires a 'using System.ServiceProcess' statement 
type = Assembly.GetExecutingAssembly().EntryPoint.DeclaringType; 
bool isRunningAsAService = type.IsSubclassOf(typeof(ServiceBase)); 
Questions connexes