Au début d'un processus avec des références à partir d'un Service Windows

J'ai un service Windows qui s'exécute en tant que mydomain\user. Je veux être en mesure d'exécuter arbitraire .exe à partir du service. Normalement, j'utilise du Processus.Start() et il fonctionne très bien, mais dans certains cas, je veux lancer l'exécutable en tant qu'utilisateur différent (mydomain\userB).

Si je change le ProcessStartInfo-je utiliser pour démarrer le processus pour inclure des informations d'identification, je commence à avoir des erreurs - une boîte de dialogue d'erreur qui dit que "L'application n'a pas réussi à s'initialiser correctement (0xc0000142). Cliquez sur OK pour fermer l'application.", ou un "Accès refusé" Win32Exception. Si je lance le processus de démarrage de code à partir de la ligne de commande au lieu de l'exécuter dans le service, le processus commence à utiliser les informations d'identification correctes (j'ai vérifié en mettant l'ProcessStartInfo à exécuter whoami.exe et la capture de la sortie de ligne de commande).

J'ai aussi essayé d'usurpation d'identité à l'aide de WindowsIdentity.Usurper l'identité d'(), mais cela n'a pas fonctionné comme je le comprends, l'usurpation d'identité n'affecte que le thread en cours, et de commencer un nouveau processus hérite du processus de descripteur de sécurité, ne pas le thread courant.

Je suis en cours d'exécution dans un test isolé de domaine, si bien que l'utilisateur a et utilisateur b sont les admins du domaine, et les deux ont la session en tant que Service de droit à l'échelle du domaine.

  • Est-il Vista OS? T-il se passer lorsque vous lancez Notepad.exe ainsi?
  • Pouvez-vous mettre un exemple de code de vos arguments?
  • Désolé, je n'ai pas été en mesure de revenir à vous plus tôt. Si vous avez encore besoin d'un exemple de code que j'ai édité ma réponse pour ajouter un lien vers un article que j'ai récemment publié avec le code source.
InformationsquelleAutor Zack Elan | 2009-03-24