Я перерос пользовательские действия на Sql Server, доступные в WiX, поэтому я предпринял смелый шаг по созданию своего собственного, используя Deployment Tools Foundation.Я хочу быть хорошим гражданином и позаботиться о том, чтобы мои поддержали откат.Но как лучше всего это сделать?
Мне нужно поддерживать SQL Server 2005 и более поздние версии всех выпусков.
Проблема, на мой взгляд, заключается в том, что установщик Windows работает в два этапа: он делает работу, сохраняя информацию об отмене по ходу дела.Затем, когда все части на месте, он либо фиксирует (удаляя информацию об отмене), либо выполняет откат.
Это означает, что стандартные транзакции не будут выполнять эту работу.Они должны были быть завершены в моем пользовательском действии Выполнить, и у меня не было бы возможности откатить их позже.
Я подумал о том, чтобы взять резервную копию только для копирования базу данных, которую я могу восстановить в действии отката при необходимости, но я думаю, что этот подход, хотя и простой, имеет недостатки.Например, я не знаю, насколько большими будут наши базы данных - поэтому я не могу гарантировать, что будет достаточно места для хранения резервной копии на целевой машине.Кроме того, резервное копирование и восстановление могут занять некоторое время, и я не хочу, чтобы обычные установки (где откат не происходил) были излишне медленными.
Так что это подводит меня к моей текущей предпочтительной идее: makeубедитесь, что координатор распределенных транзакций запущен, затем инициализируйте распределенную транзакцию перед внесением изменений, затем либо фиксируете ее, либо откатываете в соответствующих пользовательских действиях.
Кажется, я могу использовать элементы TransactionInterop класс для экспорта файла cookie, который позволит мне разделить транзакцию между моими различными настраиваемыми действиями.
Может ли кто-либо, имеющий опыт такого рода вещей, сказать, может ли он работать?