Pregunta

Lo sé, lo sé ... dejar de usar WISE. Eso no es realmente una opción para mí en este momento. Tenemos demasiado en nuestro plato para escribir un nuevo instalador y cambiar todo nuestro proceso de construcción, que es lo que tendría que hacer.

En cualquier caso, el problema es que nuestra desinstalación EXE no borrarse a sí mismo cuando se desinstala. Se encuentra en la carpeta Archivos de programa, donde está instalada nuestra aplicación. Después de que el programa de desinstalación se hace esto, queremos que todos los archivos eliminados y la aplicación carpeta eliminada. En su lugar, los restos de desinstalación, junto con la carpeta de aplicaciones, ya que parece que no puede sustraerse mientras se está ejecutando.

Esto parece una tarea rudimentaria, ya que todos los demás programas instalados en mi equipo tienen sus desinstaladores encuentran en su carpeta Archivos de programa, así y que se retiran después de desinstalar, sin embargo, me parece que no puede encontrar a nadie más con el mismo problema a través de Google. Tiene sentido para mí que el archivo no se puede eliminar ya que actualmente está cargado en la memoria, pero * * tono de lloriqueo todo el mundo lo hace ... ¿por qué no yo?

EDIT: Si ayuda, estoy corriendo Wise Installation Studio 7.0 y la modificación de la secuencia de comandos de desinstalación en el Editor de paquetes WiseScript. La parte que elimina las miradas carpeta Archivos de programa como Delete File(s) %MAINDIR%\*.* donde% MAINDIR% es la carpeta de aplicación en Archivos de programa. Hay dos opciones disponibles para este comando (ambos de los cuales están en) -. Incluir subdirectorios y quitar directorio que contiene archivos

¿Fue útil?

Solución

Así que lo que terminé haciendo lo que estaba recreando los mejores instaladores hacen. Tengo el cheque desinstalador para ver si se está ejecutando desde el directorio% TEMP%, y si no es lo cuento a copiarse en la carpeta de archivos temporales y funcionar por sí mismo a partir de ahí. entonces me marca el que está en la carpeta temporal que se elimina al reiniciar añadiéndolo a la clave de registro:

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

@altie: Su solución probablemente habría funcionado tan bien, pero creo que me gusta esta solución mejor. Parece más limpio y más robusto. Pero muchas gracias por dar el código de ejemplo ... Yo archivos por lotes de escritura, en ocasiones, y no tenía conocimiento de bucle o el comando "lista de tareas". Esto podría ser útil en el futuro!

Otros consejos

Si no puede encontrar alguna otra manera de hacerlo, aquí hay un truco sucio: hacer que el último paso en el instalador para el fuego de un cmd.exe que espera a que su proceso de Wise a extremo, lo elimina

Un ejemplo de cómo hacer esto en un archivo por lotes con la lista de tareas:

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

No he probado este código o comprobado tanto por los errores de sintaxis, pero está cerca. for /? y tasklist /? desde la línea de comandos pueden ayudar a determinar cómo ajustar esto a sus necesidades.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top