Крис, у меня были проблемы с тем, чтобы заставить MsiGetProperty работать вообще. Просто добавив код, который у вас есть
string sRemove;
number nBuffer;
nBuffer = 256;
if (MsiGetProperty(ISMSI_HANDLE, "REMOVE", sRemove, nBuffer) = ERROR_SUCCESS) then
//do something
endif;
Я получаю "неопределенный идентификатор". Я попробовал несколько вещей, чтобы заставить его признать это безуспешно. После еще одного возни, я понял, что IS не вызывает функцию удаления в первую очередь. У меня была другая функция, и я думаю, что она вызывала те же самые вещи. После очистки я получил результат, который ожидал в начале.
Таким образом, правильным ответом будет то, что вам не нужно ничего делать, чтобы код в событии DefaultFeature_Installed не вызывался при удалении.