Bonjour à tous,
J'ai déjà trouvé plusieurs forums posant la même question, mais je n'ai jamais réussi à faire fonctionner les (quelques) méthodes proposées, je m'explique :
J'ai une application qui fonctionne en service Windows, elle est déployée sur un petit parc de PC distants (tous en Windows Server 2003 R2 ou 2008 - ça peut avoir son importance).
Pour mettre à jour l'application, sans intervention manuelle, je me suis lancé dans le codage d'un autre service Windows : il contrôle si une MAJ est dispo, et si oui il effectue le code suivant :
Ce code ne fonctionne jamais ! (mais ne lève pas d'erreurs, et le WaitForExit() ne dure pas plus de 0.5s)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 // installation à partir du fichier .msi Process installer = new Process(); installer.StartInfo.FileName = "MsiExec.exe"; installer.StartInfo.Arguments = "/qn /i{" + PRODUCT_KEY + "}"; installer.StartInfo.UseShellExecute = false; installer.Start(); installer.WaitForExit();
Par contre, si je le copie colle dans une application type Windows Form, le programme s'installe bien
J'ai aussi tenté la correction suivante, qui elle lève l'erreur "Accès refusé" (alors que le compte spécifié à tous les droits possibles, c'est le seul Administrateur de la machine)
Une dernière précision : cocher la case "Autoriser le service à interagir avec le bureau" sur le service de MAJ ne change rien non plus
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 // installation à partir du fichier .msi, en simulant la connexion avec un compte utilisateur Process installer = new Process(); installer.StartInfo.UseShellExecute = false; installer.StartInfo.Domain = "mon_domaine"; installer.StartInfo.UserName = "mon_compte"; installer.StartInfo.Password = password; // SecureString de "mon_password" installer.StartInfo.LoadUserProfile = true; installer.StartInfo.FileName = "MsiExec.exe"; installer.StartInfo.Arguments = "/qn /i{" + PRODUCT_KEY + "}"; installer.Start(); installer.WaitForExit();
Merci pour votre aide !
Partager