É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:
- 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.
- Est-ce que
Console App A
doit également utiliser nom d'utilisateur/domaine/mot de passe dans sa commandeProcess.Start()
lors de l'appel du programme tiers? - É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
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
une solution finale avec un exemple de code source complet à son sujet? – Kiquenet
@Kiquenet: S'il vous plaît voir ma réponse acceptée. –