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 ответа:
Вот несколько предложений для проверки:
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 за помощь в решении этой проблемы!