Question

Je sais, je sais ... cesser d'utiliser WISE. Ce n'est pas vraiment une option pour moi en ce moment. Nous avons trop sur notre assiette pour écrire un installateur complètement nouveau et changer notre ensemble du processus de construction, qui est ce qui devrait être fait.

De toute façon, le problème est que notre désinstallation EXE ne se supprime pas lors de la désinstallation. Il se trouve dans le dossier Program Files, où notre application est installée. Après le programme de désinstallation est terminée, nous voulons que tous les fichiers supprimés et l'application dossier supprimé. Au lieu de cela, le programme de désinstallation reste ainsi que le dossier de l'application, car il ne peut pas sembler se retirer en cours d'exécution.

Cela semble être une tâche rudimentaire, puisque tous les autres programmes installés sur mon ordinateur ont leurs uninstallers situés dans leur dossier Program Files aussi bien et ils sont supprimés après la désinstallation, mais je ne peux pas sembler trouver quelqu'un d'autre avec le même problème via Google. Il me semble logique que le fichier ne peut être supprimé car il est actuellement chargé en mémoire, mais le ton * pleurnicher * tout le monde fait ce ... pourquoi ne pas?

EDIT: Si elle aide, je suis en cours d'exécution Wise Installation Studio 7.0 et modifier le script de désinstallation dans le WiseScript Package Editor. La partie qui supprime le dossier Program Files ressemble Delete File(s) %MAINDIR%\*.* où% MAINDIR% est le dossier application dans Program Files. Il y a deux options disponibles pour cette commande (qui sont tous deux sur) -. Inclure les sous-répertoires et supprimer le répertoire contenant les fichiers

Était-ce utile?

La solution

Alors, ce que je fini par faire recréait ce que les meilleurs installateurs font. Je le chèque de désinstalleur pour voir si elle est en cours d'exécution de la% TEMP%, et si ce n'est pas je lui dis de se copier dans le dossier temporaire et se lance à partir de là. Je marque alors l'un dans le dossier temporaire à supprimer au redémarrage en l'ajoutant à la clé de Registre:

HKLM\System\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations

@altie: Votre solution aurait probablement fonctionné aussi bien, mais je pense que je aime cette solution mieux. Il semble plus propre et plus robuste. Mais je vous remercie beaucoup pour donner l'exemple de code ... Je fichiers batch écrire à l'occasion et n'a pas eu connaissance de la boucle ou la commande « tasklist ». Cela pourrait se révéler utile dans l'avenir!

Autres conseils

Si vous ne pouvez pas trouver une autre façon de le faire, voici un truc sale: faire la dernière étape de votre installateur pour tirer au large d'une cmd.exe qui attend votre processus Wise à la fin, puis le supprime

Un exemple de la façon de le faire dans un script batch avec tasklist:

rem Expand variables delayed with !! syntax for for loop
setlocal EnableExtensions EnableDelayedExpansion

rem Create a loop with a label and goto
:loopstart
for /F "delims= " %%a in ('tasklist /FI "imagename eq wiseuninstaller.exe"') do (
   if not "%%a"=="INFO: No tasks are running which match the specified criteria." (
      set stillrunning=no
   ) else (
      set stillrunning=yes

      rem Add a 5 second delay with ping and throw out the output.
      ping -n 5 > NUL 2>&1
   )
)

if "!stillrunning!"=="yes" goto :loopstart

del wiseuninstaller.exe

Je n'ai pas testé ce code ou vérifié beaucoup d'erreurs de syntaxe, mais il est proche. for /? et tasklist /? de la ligne de commande peut vous aider à déterminer comment modifier ceci à vos besoins.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top