2009-01-18 5 views
3

J'essaie de démarrer un processus externe à partir d'un service Windows .NET. Dans le passé, j'ai utilisé la surcharge Process.Start() qui prend le chemin de l'exécutable et une chaîne de ligne de commande. Cela marche. Mais maintenant, je voudrais commencer le processus et le faire fonctionner dans le contexte d'un utilisateur particulier. Je demande donc cette version de Start()System.Diagnostics.Process.Start() ne peut pas démarrer le processus lorsqu'il est appelé à partir du service Windows

public static Process Start(
    string fileName, 
    string userName, 
    SecureString password, 
    string domain) 

Cependant, quand je l'appelle la méthode, l'application que je suis en train de courir génère une exception non gérée:

The application failed to initialize properly (0xc0000142). Click on OK to terminate the application.

J'ai essayé de lancer différentes applications et ils génèrent tous la même exception. J'ai exécuté le code en dehors du service Windows et l'application démarre correctement.

Y a-t-il un moyen de faire fonctionner cela dans un service Windows?

+0

Cela ressemble à un doublon de cette question: http://stackoverflow.com/questions/362419/using-process-start-to-start-a-process-as-a-different-user-from-within -une fenêtre –

+0

une solution finale avec un exemple de code source complet à ce sujet? – Kiquenet

Répondre

0

Utilisez Filemon et vérifiez s'il essaie d'ouvrir un fichier de configuration et de ne pas le trouver. J'ai une fois eu cette erreur en raison d'une config malformée.

+0

L'application est une application Win32 simple (c'est-à-dire aucun fichier de configuration). – jmatthias

2

Peut-être que l'utilisateur doit avoir un droit de sécurité «se connecter en tant que service». Ceci est fait avec l'application "politique de sécurité locale". Et/ou "connexion en tant que travail par lots".

+0

Si cela fonctionne lorsqu'il n'est pas exécuté dans un service, c'est généralement un problème d'autorisations. – bryanbcook

1

Ceci est juste une photo dans le noir, mais peut-être que vous pouvez essayer d'exécuter le service Windows en mode interactif. Si cela fonctionne, cependant, cela ne peut pas être fait dans Windows Vista (à cause de l'isolement de la session 0).

2

Ceci est très similaire à cette question here. La réponse est généralement due à des problèmes de sécurité avec le bureau et la station de fenêtre dans laquelle le processus est exécuté. Voir this article pour une explication et un exemple de code.

Questions connexes