msi с embeddedchainer не удается удалить с " плохим дескриптором"


Я наконец-то запустил свой встроенный chainer msi, причем четыре sub msi были установлены через установщик.InstallProduct в моем c# chainer.exe (как описано в одном и единственном примере chainer, найденном в другом месте здесь на stackoverflow). Моя проблема: если я удалю пакет позже, когда " транзакция.Join " вызывается, на этот раз он терпит неудачу с ошибкой MSI: bad handle. Я должен убить msiexec.exe процесс в taskmanager, а затем все работает хорошо.

Любой предложения?

Добавление: я использую установщик Windows 4.5, и в таблице MsiEmbeddedChainer есть только одна запись. Четыре msi обрабатываются один за другим исполняемым файлом chainer.
2 2

2 ответа:

Вот несколько предложений для проверки:

1) обработка транзакций многопакетных установок установщика Windows не поддерживается установщиком Windows 4.0 и более ранними версиями. Установщик Windows версии 4.5 или более поздней требуется для отката установки нескольких пакетов в виде одной транзакции. Функции установщика Windows, которые могут вызвать проблемы при установке, ремонте, обновлении или удалении приложений, перечислены здесь: Multipacket Установки .

2) Если в таблице MsiEmbeddedChainer имеется несколько записей. Только один встроенный цепной механизм может быть запущен. Если несколько записей были подготовлены к запуску, то не определено, какая из них будет запущена.

Наконец, проблема исправлена: есть ошибка в стандартном примере для встроенного цепочника c#:

В строке: IntPtr ptr = new IntPtr (преобразовать.ToInt32(args[0], 16)); "16" должно быть заменено на "10"!

В противном случае, если имеется более 10 транзакций, запущенных встроенным чейнером (как в моей установке, где установлены пять дополнительных msi), дескриптор, используемый "транзакцией.Join " в какой-то момент будет ошибочным и выдаст ошибку "bad handle".

Большое спасибо Microsoft за помощь в решении этой проблемы!