2017-06-12 6 views
0

Je tente de désinstaller silencieusement mon programme d'installation en exécutant une seconde fois l'installation. L'utilisation de SetSilent sous la fonction un.onInit fonctionne lorsque vous cliquez manuellement sur l'exécutable, mais ne fonctionne pas lorsque vous l'exécutez en mode silencieux via la ligne de commande. Je crois que c'est faire à plusieurs threads en cours d'exécution (le programme d'installation à côté de l'exécutable de désinstallation) afin de corriger cela, je voulais utiliser le saut IfSilent et exécuter une commande en ligne de commande si le programme d'installation s'exécute silencieusement. Voici ce que j'ai.Exécution de la commande de ligne de commande NSIS à l'aide de IfSIlent jump

IfSilent 0 +2

Exec '"$INSTDIR\uninstall.exe" /S'

J'ai imbriqué cela dans la section principale avec les fichiers inclus. J'ai vérifié et il ne semble pas que la commande ci-dessus est en cours d'exécution. La commande exec ci-dessus est-elle utilisée correctement? MISE À JOUR: J'ai ajouté une partie du code de l'installateur que j'essaie de créer. Ce que je veux faire est que je veux vérifier le système pour voir si l'application existe quelque part sur la machine cible. Si c'est le cas, je veux désinstaller la version précédente.

#Installer Functions 
Function .onInit 

    ReadRegStr $R0 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" "UninstallString" 
    StrCmp $R0 "" done 

    ;Run the uninstaller 
    ClearErrors 
    ExecWait '"$R0" /S _?=$INSTDIR' 
    IfErrors no_remove_uninstaller done 
    no_remove_uninstaller: 
    done: 
     InitPluginsDir 
FunctionEnd 

Maintenant, voici mon problème. Cela fonctionne si je l'installe normalement. Cependant lorsque j'essaye d'installer ceci silencieusement, le programme de désinstallation ne s'exécute pas.

Veuillez noter que j'utilise $ R0 parce que je veux gérer le scénario dans lequel l'utilisateur peut sélectionner un autre répertoire que le répertoire d'installation. J'ai aussi essayé d'utiliser INSTDIR mais il ne fonctionne toujours pas

+0

Je ne comprends pas bien ce que vous essayez de faire, s'il vous plaît préciser. – Anders

+0

J'essaie de désinstaller la version précédente de mon application avant d'effectuer mon installation. – domo1

Répondre

0

Vous devez exécuter le programme de désinstallation avec un paramètre spécial:

ExecWait '"$INSTDIR\uninstaller.exe" /S _?=$INSTDIR' 
Delete "$INSTDIR\uninstaller.exe"