Вы добавили пользовательские действия в MSI? Если у вас нет настроенного действия для события удаления, я не уверен, будут ли вызваны эти события. Есть ли какая-либо причина, по которой вы используете события до и после установки вместо переопределения команды «удалить»?
Если вы не вызываете функцию установки для компонента, то установщик также не будет вызывать функцию удаления. Вы можете запрограммировать окно сообщения в деинсталляции (или System.Diagnostics.Debugger.Attach()
), если хотите посмотреть, выполняется код или нет.
Также для переносимости я настоятельно рекомендую использовать команду Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles)
для поиска каталога программных файлов. Это будет портировать через x64 и x86, а также любые будущие изменения в каталоге программных файлов в будущем.
Во-вторых, я бы также использовал функцию Path.Combine
для безопасного объединения папок.
EDIT:
Я думаю, что вы, возможно, неправильно используете процедуру установки. Пользовательское действие установщика заключается в том, чтобы «зарегистрировать» службу после ее установки MSI. Также необходимо отменить регистрацию службы перед ее удалением MSI.
Получите копию WIX или используйте MSI Builder в Visual Studio. Перенесите выходные данные проекта для вашего сервиса в проект, настройте настраиваемые действия для вызова вашего exe сервиса, и затем MSI выполнит установку / удаление для вас. Будет вызвано пользовательское действие и зарегистрируйте / отмените регистрацию вашей службы в кэше.
Будьте очень осторожны, хотя, если вам нужно обновить, есть ошибка в поведении установщика службы, он не сможет успешно обновить или понизить версию без правильного подключения MSI для обработки всех возможных последовательностей.