Domanda

Lo so, lo so ... smettere di usare WISE. Questo non è davvero un'opzione per me in questo momento. Abbiamo troppo sul nostro piatto di scrivere un nuovo installer e cambiare il nostro intero processo di generazione, che è quello che avrebbe dovuto essere fatto.

In ogni modo, il problema è che la nostra disinstallazione EXE non elimina sé durante la disinstallazione. Si trova nella cartella Program Files, in cui è installato la nostra applicazione. Dopo che il programma di disinstallazione è fatto, vogliamo che tutti i file rimossi e l'applicazione cartella eliminata. Invece, i resti di disinstallazione insieme con la cartella di applicazione, dal momento che non può sembrare per rimuovere se stesso mentre è in esecuzione.

Questo sembra un compito rudimentale, dal momento che tutti gli altri programmi installati sul mio computer hanno i loro programmi di disinstallazione trovano nella loro cartella Programmi come bene e sono rimossi dopo la disinstallazione, eppure non riesco a trovare nessuno con la stessa problema tramite Google. Ha senso per me che il file non può essere eliminato in quanto è attualmente caricato in memoria, ma * tono lamentoso * tutti gli altri lo fa ... perché non posso?

Modifica Se aiuta, sto facendo funzionare Wise Installation Studio 7.0 e modificando lo script di disinstallazione nel WiseScript Editor di pacchetti. La parte che rimuove gli sguardi cartella Programmi come Delete File(s) %MAINDIR%\*.* dove% MAINDIR% è la cartella applicazione in Program Files. Ci sono due opzioni disponibili per questo comando (che sono entrambi su) -. Includere sub-directory e rimuovere directory contenente i file

È stato utile?

Soluzione

Quindi quello che ho finito per fare stava ricreando ciò che gli installatori migliori fanno. Ho l'assegno di disinstallazione per vedere se è in esecuzione dalla directory% TEMP%, e se non lo è lo dico di copiare se stesso nella cartella Temp e si corro da lì. Ho quindi segnare l'uno nella cartella Temp da eliminare al riavvio aggiungendolo alla chiave di registro:

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

@altie: La vostra soluzione probabilmente avrebbe funzionato così, ma penso che mi piace questa soluzione migliore. Sembra più pulito e più robusto. Ma vi ringrazio molto per dare il codice di esempio ... devo fare i file batch di scrittura sul occasione e non ha avuto conoscenza del loop o il comando "tasklist". Ciò potrebbe rivelarsi utile in futuro!

Altri suggerimenti

Se non riesci a trovare qualche altro modo per farlo, ecco un trucco sporco: fare l'ultimo passo nella vostra installazione di sparare un cmd.exe che rimane in attesa del processo di Wise alla fine, poi lo cancella

Un esempio di come fare questo in uno script batch con 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

Non ho testato questo codice o controllato tanto per errori di sintassi, ma è vicino. for /? e tasklist /? dalla riga di comando possono aiutare a capire come modificarla a vostro esigenze.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top