2010-08-14 4 views
1

Édition Pour tous ceux qui ont un problème, il s'agit, comme d'habitude, d'un problème simple à résoudre. Les clés doivent être installées sous le compte de service. Connectez-vous au poste de travail sous le compte de service, installez les clés, puis exécutez-le à partir de n'importe quelle session qui le lancera dans le contexte du compte de service. Problème résolu.Service Windows Process.Start ne fonctionne pas sous le compte de service réseau

Édition: Le système d'exploitation est Win 2003 Modifier: fonctionne au démarrage de notepad.exe. Cela m'a amené à croire qu'il se trouvait quelque part dans l'application de console appelant GnuPG.

J'ai un service Windows qui agit comme un mécanisme pour transférer des fichiers dans/hors du réseau. Pour certains de ces processus, je voudrais exécuter une application de console avant que le transfert se produise, ou, après qu'il se produise.

Je rencontre des problèmes lors de l'exécution correcte des applications de la console sous un compte de service réseau.

Voici une présentation du problème:

service Windows fonctionne sous un compte de service réseau, appelons-le Company\ServiceAccount Company\ServiceAccount veut courir Transfer A. Transfer A doit avoir Console App A exécuté avant que les fichiers ne soient déplacés. Console App A également des shells à un programme d'application de console tiers. (Raison étant - nous voulions intégrer plus de logique métier dans Console A plutôt que de mettre ce code dans le service lui-même)

Console App A appelle un programme PGP de ligne de commande libre (GnuPG pour quiconque se demande). Console App A attend que GnuPG se termine et déplace certains fichiers vers un point de dépôt afin que Transfer A puisse les ramasser et les déplacer.

Le code de l'application s'exécute très bien sur mon poste de travail fonctionnant sous le compte système local. Lorsque le service Windows s'exécute, je ne reçois aucun commentaire de l'application Console. Je ne reçois aucun accès refusé les erreurs ou quoi que ce soit d'autre, ce qui n'aide pas à essayer de déboguer cela.

Questions:

  1. Y at-il des problèmes évidents? Le compte de service est en effet valide et n'a aucun problème pour se connecter au réseau.
  2. Est-ce que Console App A doit également utiliser nom d'utilisateur/domaine/mot de passe dans sa commande Process.Start() lors de l'appel du programme tiers?
  3. Évidemment, il pourrait y avoir des alternatives à la façon dont je fais cela mais - devrais-je abandonner complètement? J'ai le sentiment que ça devrait marcher.

code:

 System.Diagnostics.Process process = null; 
     System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo(executable, args); 

     string pwd = "mypassword"; //edited for security 
     System.Security.SecureString securePwd = new System.Security.SecureString(); 

     foreach (char c in pwd) 
      securePwd.AppendChar(c); 

     try 
     { 
      psi.UseShellExecute = false; 
      psi.WindowStyle = ProcessWindowStyle.Hidden; 
      psi.CreateNoWindow = true; 
      psi.ErrorDialog = false; 
      psi.Password = securePwd; 
      psi.UserName = "myserviceaccount"; //edited for security 
      psi.Domain = "MyCompanyDomain"; //edited for security 
      process = System.Diagnostics.Process.Start(psi); 
      //Wait for the process to finish 
      process.WaitForExit(); 
      process.Close(); 
     } 
     catch (System.InvalidOperationException iox) { } //handle 
     catch (System.ArgumentException ax) { } //handle 
     catch (System.ComponentModel.Win32Exception wx) { } //handle 
     catch (System.IO.FileNotFoundException fnfx) { } //handle 
+0

Quel genre de commentaires ** obtenez-vous? Peut-être le journal des événements? Essayez également de rediriger les E/S standard de l'application de console que vous lancez. – ErikHeemskerk

+0

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

+0

@Kiquenet: S'il vous plaît voir ma réponse acceptée. –

Répondre

3

Pour quiconque a un problème, il s'avère, comme d'habitude, être un problème simple à résoudre. Les clés doivent être installées sous le compte de service. Connectez-vous au poste de travail sous le compte de service, installez les clés, puis exécutez-le à partir de n'importe quelle session qui le lancera dans le contexte du compte de service. Problème résolu.

0

À partir des services Windows Vista sont explicitement interdit d'interagir avec la session utilisateur, même si marqué comme interactive. Voir Interactive Services:

services importants ne peuvent pas directement interagir avec un utilisateur que de Windows Vista .Par conséquent, les techniques mentionnées dans la section intitulée Utilisation de un service interactif ne doivent pas être utilisé dans le nouveau code.

Si l'une de vos applications de console * effectue une interaction avec l'utilisateur, elle échouera. Cela peut-il être le cas? Si oui, vous ne pouvez pas utiliser vos applications de console à partir d'un service, elles devront être lancées à partir d'une session utilisateur.

+0

L'application de console ne nécessite pas d'entrée d'un utilisateur. Nous passons simplement dans les arguments de la ligne de commande. –

Questions connexes