2008-09-10 6 views
3

Je parviens à désinstaller une application tierce via la ligne de commande et via un programme d'installation Inno Setup personnalisé.La commande de désinstallation échoue uniquement en mode de libération

ligne de commande d'exécution:

MSIEXEC.exe /x {14D74337-01C2-4F8F-B44B-67FC613E5B1F} /qn 

Inno Setup Commande:

[Run] 
Filename: msiexec.exe; Flags: runhidden waituntilterminated; 
Parameters: "/x {{14D74337-01C2-4F8F-B44B-67FC613E5B1F} /qn"; 
StatusMsg: "Uninstalling Service..."; 

Je suis également en mesure de désinstaller l'application lors de l'exécution du programme C# code suivant en mode débogage.

code C#:

string fileName = "MSIEXEC.exe"; 
string arguments = "/x {14D74337-01C2-4F8F-B44B-67FC613E5B1F} /qn"; 

ProcessStartInfo psi = new ProcessStartInfo(fileName, arguments) 
{ 
    CreateNoWindow = true, 
    UseShellExecute = false, 
    RedirectStandardOutput = true 
}; 

Process process = Process.Start(psi); 
string errorMsg = process.StandardOutput.ReadToEnd(); 
process.WaitForExit(); 

Le même code C#, cependant, produit la sortie après l'échec lorsqu'il est exécuté comme compilé, déployé le service Windows:

"This action is only valid for products that are currently installed." 

supplémentaires Commentaires:

  • Le service Windows qui exécute la commande de désinstallation s'exécute sur la même machine que le code testé en mode débogage. Le service Windows est en cours d'exécution/connecté en tant que compte système local .
  • J'ai consulté mes journaux d'application et j'ai validé que les arguments de commande exécutés sont les mêmes en mode de débogage et en mode de libération.
  • J'ai consulté l'Observateur d'événements mais il n'offre aucun indice.

Pensées? Toute aide serait grandement appréciée. Merci.

Répondre

1

Merci à ceux qui offrent de l'aide. Cela semble être un problème d'autorisations. J'ai mis à jour mon service pour qu'il fonctionne sous un compte administrateur et il a réussi à désinstaller l'application tierce. Pour Orion, même si le compte système local est un compte puissant qui a un accès complet au système - http://technet.microsoft.com/en-us/library/cc782435.aspx - il ne semble pas avoir les droits nécessaires pour effectuer la désinstallation.

[Voir les commentaires supplémentaires pour l'histoire en ce qui concerne LocalSystem pouvoir désinstaller l'application pour laquelle il est installé.]

2

Étape 1:Check the MSI error log files

Je me méfie que votre problème est dû à l'exécution en tant que LocalSystem.

Le compte Système local n'est pas identique à un compte d'utilisateur normal qui possède des droits d'administrateur. Il n'a pas accès au réseau et son interaction avec le registre et le système de fichiers est très différente.

De mémoire toutes les requêtes de lecture/écriture à votre répertoire personnel de 'ou HKCU sous le registre fait aller soit dans le profil de l'utilisateur par défaut, ou dans le cas de dirs temp, c:\windows\temp

2

Je suis venu à travers problèmes similaires dans le passé avec l'installation, un client utilisait le compte système pour installer et cela causait toutes sortes de problèmes d'autorisation pour les utilisateurs non-administrateurs.

Les fichiers journaux MSI ne vont pas vraiment aider si l'application ne semble pas "installée", je suggérerais de commencer par capturer la sortie de MSIINV.EXE sous le compte système, qui vous obtiendrez un "inventaire" de les programmes actuellement installés (ou ce que cet utilisateur voit installé) http://blogs.msdn.com/brada/archive/2005/06/24/432209.aspx

Je pense que vous avez probablement besoin de revenir à la planche à dessin et de voir si vous avez vraiment besoin du service Windows pour effectuer la désinstallation. Vous rencontrerez probablement toutes sortes de problèmes Vista UAC si vous ne l'avez pas déjà ...

0

C'est bizarre. LocalSystem a définitivement les privilèges pour installer des applications (c'est comme ça que Windows Update et le déploiement de logiciels dans Active Directory fonctionnent), donc il devrait être capable de désinstaller aussi bien.

Peut-être que l'application est initialement installée par utilisateur plutôt que par machine?

+0

Le programme d'installation de l'application est intégré dans un programme d'installation InnoSetup personnalisé. Le programme d'installation InnoSetup, à son tour, est exécuté manuellement par l'utilisateur connecté. Cela dit, la désinstallation est déclenchée par un service s'exécutant sous le compte Système local. Je vais essayer d'avoir le service installer et désinstaller. Beaucoup de thx. –

0

Lalonde @ Paul

installateur de l'application est enveloppé dans une mesure InnoSetup Installer. Le programme d'installation InnoSetup, à son tour, est exécuté manuellement par l'utilisateur connecté. Cela dit, la désinstallation est déclenchée par un service s'exécutant sous le compte Système local.

Apparemment, vous étiez sur quelque chose. J'ai mis en place un test rapide qui a eu le service en cours d'exécution sous le compte LocalSystem installer ainsi que désinstaller l'application et tout a fonctionné parfaitement. Tu avais raison. Le compte LocalSystem nécessite des autorisations de désinstallation pour les applications dans lesquelles il est installé. Vous avez sauvé la journée. Merci pour les commentaires!

+0

Si vous avez modifié votre programme d'installation exécuté manuellement pour être par machine, cela fonctionnerait probablement aussi. Mais il faudrait que les utilisateurs installateurs aient des droits d'administration locaux. –

Questions connexes