Je dois modifier l'utilisateur d'ouverture de session pour un service Windows par programme. Et je suis en utilisant le code suivant pour le faire:Modifier l'utilisateur du service Windows par programme
string objPath = string.Format("Win32_Service.Name='{0}'", ServiceName);
using (ManagementObject service = new ManagementObject(new ManagementPath(objPath)))
{
object[] wmiParams = new object[11];
if (PredefinedAccount)
{
wmiParams[6] = "LocalSystem";
wmiParams[7] = "";
}
else
{
wmiParams[6] = ServiceUsername; // provided by user
wmiParams[7] = ServicePassword; // provided by user
}
object invokeResult = service.InvokeMethod("Change", wmiParams);
// handle invokeResult - no error up to this point
}
Ce code fonctionne dans 90% des situations, mais dans un service de situations ne peut être démarré en raison de l'ouverture de session échec. Il n'y a généralement pas d'erreur sur InvokeMetod mais quand nous essayons de commencer le service que nous obtenons l'erreur suivante:
System.InvalidOperationException: Cannot start service X on computer '.'. --> System.ComponentModel.Win32Exception: The service did not start due to a logon failure.
La solution de contournement est simple, il suffit d'entrer les mêmes informations d'identification via l'interface Windows et problème est résolu. Donc, ma question est, quelqu'un a-t-il rencontré le même problème avec ManagementObject parce qu'il semble que dans certaines situations, il ne concerne pas le nom d'utilisateur et le mot de passe du service Windows?
Je me demande si elle est due à votre déclaration à l'aide. Qu'est-ce que je veux dire est le ManagementObject se détruit avant qu'il ne soit autorisé à terminer? Je ne suis pas trop familier avec WMI, donc je ne suis pas sûr. – HVS
Étant donné que le nom d'utilisateur et le mot de passe sont saisis par l'utilisateur, je rechercherais également des problèmes. Assurez-vous qu'ils sont des noms valides. "DOMAINE \ nom d'utilisateur" est bon dans n'importe quel système, mais "nom d'utilisateur @ DOMAINE" ne fonctionne pas dans Windows 2000 et plus tôt. – HVS
Nous avons le même problème et je suis certain que le service a été installé avec un programme d'installation C#, .net 1.1. Je démarre le service à partir de la ligne de commande ('net start') et j'obtiens un échec de connexion. Étrangement, cela se produit avec 2 des 7 services installés sur la machine (probablement en utilisant le même code d'installation). Je n'ai pas encore eu le temps de le diagnostiquer, mais la machine est un serveur Windows 2003 avec les derniers service packs. Les services sont C# .net 2.0 code. La saisie manuelle du mot de passe le corrige jusqu'au redémarrage. – LegendLength