Вы можете сделать это с помощью специального действия. Вы можете добавить ссылку на свое пользовательское действие в разделе <InstallExecuteSequence>
:
<InstallExecuteSequence>
...
<Custom Action="FileCleaner" After='InstallFinalize'>
Installed AND NOT UPGRADINGPRODUCTCODE</Custom>
Тогда вам также нужно будет определить свое действие в разделе <Product>
:
<Product>
...
<CustomAction Id='FileCleaner' BinaryKey='FileCleanerEXE'
ExeCommand='' Return='asyncNoWait' />
Где FileCleanerEXE - это двоичный файл (в моем случае это небольшая программа на С ++, выполняющая пользовательское действие), которая также определяется в разделе <Product>
:
<Product>
...
<Binary Id="FileCleanerEXE" SourceFile="path\to\fileCleaner.exe" />
Реальная хитрость в этом заключается в Installed AND NOT UPGRADINGPRODUCTCODE
условии настраиваемого действия, при котором ваше действие будет запускаться при каждом обновлении (поскольку обновление действительно является деинсталляцией, а затем переустановите). Что, если вы удаляете файлы, вероятно, не хотите, чтобы вы хотели во время обновления.
С другой стороны: я рекомендую решить проблему с использованием чего-то вроде программы на C ++ для выполнения действия вместо пакетного скрипта из-за его мощности и контроля - и вы можете предотвратить мигание окна «cmd prompt» во время Ваш установщик работает.