DIRCA_CHECKFX Возвращаемое значение 3 - Проект развертывания VS 2013
У меня страшная проблема с моей попыткой установки MSI:
MSI (c) (98:B0) [18:01:22:818]: Invoking remote custom action. DLL: C:\DOCUME~1\sspencer\LOCALS~1\Temp\1\MSI19.tmp, Entrypoint: CheckFX
MSI (c) (98:FC) [18:01:22:833]: Cloaking enabled.
MSI (c) (98:FC) [18:01:22:833]: Attempting to enable all disabled privileges before calling Install on Server
MSI (c) (98:FC) [18:01:22:833]: Connected to service for CA interface.
Action ended 18:01:22: DIRCA_CheckFX. Return value 3.
После нескольких копаний это фактически указывает на то, что DLL не удалось загрузить напрямую, серверу CA не удалось подключиться и начать попадание в точки входа DLL.
Я использовал orca и 7zip для извлечения пользовательского действия для DIRCA_CheckFX, которое вставляется Visual Studio при сборке проекта развертывания. Я взял библиотеку DLL и затем выполнил Dependency Walker в хост-системе (Server 2003 R2), которая выдала ошибку:
Error: At least one module has an unresolved import due to a missing export function in an implicitly dependent module.
Я перекомпилировал систему с помощью компилятора VS 2010, извлек DLL и запустил обходчик зависимостей, который не вызывал ту же ошибку. Т.е. компиляция VS 2010 работает, компиляция VS 2013 завершается неудачно, так как включенная DLL не загружается в целевой среде.
Мой вопрос заключается в том, как устранить неполадки, в которых отсутствуют библиотеки DLL, чтобы устранить эту ошибку, о которой сообщает Dependency Walker.
4 ответа
Должна быть установлена VS 2010, из которой вы можете получить действительный файл "dpca.dll".
- Закрыть Visual Studio 2013
- Скопировать файл с заменой
dpca.dll
отC:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\Tools\Deployment
вC:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\CommonExtensions\Microsoft\VSI\bin
, - Открытый проект
- перестраивать
В предварительном просмотре воскресения.vdproj используются библиотеки DLL, которые не поддерживают Windows XP или Server 2003. Microsoft опубликовала обновление, которое могло исправить эту ошибку.
Вот что я сделал, чтобы обойти эту проблему для 32-разрядного проекта развертывания.
Создайте проект установки в VS2010 один раз. Этот пакет не преследуется проблемой, но я не хотел продолжать сборку в другой версии VS.
Откройте полученный MSI-файл с помощью Orca, выберите двоичную таблицу и экспортируйте содержимое MSVBDPCADLL в файл.
Теперь после сборки в VS2013 используйте Orca для импорта экспортированных данных в Binary\MSVBDPCADLL, чтобы исправить пакет.
Я должен сделать то же самое с 64-битным проектом, но в этом случае он должен импортировать правильный двоичный файл InstallUtil (C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtilLib.dll).
Проекты развертывания Visual Studio были настолько ужасными, что Microsoft удалила их из Visual Studio 2012. Разработчики были настолько неосведомлены о том, почему они были ужасны, что они просили и умоляли их вернуться. Умные парни из Microsoft, которые понимают MSI, покинули здание, а люди, которые остались, уступили разработчикам, чтобы они вернулись.
Один из тех действительно умных парней подвел итог этого в твиттере:
Возвращение vdproj: выстрелы в голову, люди или они возвращаются как ходячие.
Я написал статью о своих чувствах: Visual Studio Installer Resurrection
Итак, давайте поговорим о том, как инструмент на этот раз подводит вас. Найдите минутку, чтобы прочитать эту статью, написанную одним из действительно умных, чтобы оставить MSFT:
Zataoca: Пользовательские действия - это (обычно) признание неудачи.
VDRPOJ создал специальное действие, чтобы сделать что-то, что MSI могла сделать изначально, и теперь это не удается. Допустим, вы нашли DLL и исправили ее для работы на вашем компьютере. Что происходит, когда вы отправляете MSI на 1000000 машин? Сколько машин там выйдет из строя? Сколько звонков в службу поддержки вы получите? Сколько твитов вы получите, что ваш продукт отстой?
Проще говоря, я бы переделал ваш установщик, используя лучший инструмент, такой как XML установщика Windows и XML установщика Windows Industrial Strength. Если у вас есть деньги, чтобы потратить InstallShield Professional, это также хороший выбор.