Вопрос

Я знаю, я знаю ... перестань использовать мудрый. Это не совсем вариант для меня прямо сейчас. У нас слишком много на нашей тарелке, чтобы написать совершенно новый установщик и изменить весь наш процесс сборки, что должно быть сделано.

В любом случае, проблема в том, что наш удаление EXE не удаляется при удалении. Он расположен в папке Program Files, где установлено наше приложение. После того, как снят установлен, мы хотим, чтобы все файлы удалили и удалили папку приложений. Вместо этого удаляющий остается вместе с папкой приложений, поскольку он не может удалить себя во время работы.

Это кажется элементарной задачей, поскольку все другие программы, установленные на моем компьютере Анкет Для меня имеет смысл, что файл не может быть удален, так как он в настоящее время загружается в память, но * скулил тон * все остальные делают это ... почему я не могу?

РЕДАКТИРОВАТЬ: Если это помогает, я запускаю Wise Installation Studio 7.0 и изменяю сценарий удаления в редакторе пакетов Wisscript. Часть, которая удаляет папку программных файлов, выглядит как Delete File(s) %MAINDIR%\*.* где % maindir % является папкой приложений в программных файлах. Для этой команды есть два доступных параметра (оба из которых включены)-включайте подразрешители и удаляйте каталог, содержащий файлы.

Это было полезно?

Решение

Так что я в итоге сделал, так это воссоздание того, что делают лучшие установщики. У меня есть проверка удаления, чтобы увидеть, работает ли он от % depmit Directory, и если это не скажу, чтобы копировать себя в папку Temp и работать оттуда. Затем я отмечаю тот, который в папке Temp, который будет удален при перезагрузке, добавив его в ключ реестра:

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

@altie: Ваше решение, вероятно, сработало бы хорошо, но я думаю, что мне больше нравится это решение. Это кажется более чистым и более надежным. Но большое спасибо за предоставление образца кода ... Я иногда пишу пакетные файлы и не знал о циклов или команде «Задача». Это может оказаться полезным в будущем!

Другие советы

Если вы не можете найти какой -то другой способ сделать это, вот грязный трюк: сделайте последний шаг в вашем установщике, чтобы выпустить CMD.Exe, который ждет вашего мудрый процесс, затем удаляет его.

Пример того, как сделать это в пакетном скрипте с помощью списка задач:

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

Я не тестировал этот код и не проверил его на предмет синтаксических ошибок, но он близок. for /? а также tasklist /? Из командной строки может помочь вам выяснить, как настроить это в соответствии с вашими потребностями.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top