Разобраться в подробном трассировке .MSI - запустить CustomAction - PullRequest
0 голосов
/ 05 января 2010

Имеет смысл из подробного следа .MSI. Я создал .MSI, используя VisualStudio 2008.

Вот предыстория того, что я пытаюсь сделать: http://xmlpreprocess.codeplex.com/Thread/View.aspx?ThreadId=79454

Цель - запустить программу под названием XmlPreprocess.exe, подобную этой: xmlpreprocess.exe /x:"SettingsFileGenerator.xml "/i:"web.config" / e: QA / v

/ x: parm происходит из одной из моих форм пользовательского интерфейса, а значение / e: выбирается из четырех переключателей.

Я установил свойство "InstallerClass" в False, и свойство "CustomActionData" для: / x: "[SETTINGSFILE]" /i:"[TARGETDIR]web.config "[CUSTOMSETTINGS] / e: [ENVIRONMENTBUTTON] и я оставляю свойство "Аргументы" пустым.

Вот что говорит мне след. Похоже, мои пармы собираются в соответствующие места (я выбрал «QA» из переключателя). Ошибка та же, что и на экране графического интерфейса пользователя: « Программа, запущенная как часть установки, завершилась не так, как ожидалось. Обратитесь в службу поддержки или к поставщику пакета. » Я не уверен, что информация ErrorIcon - просто шум, или если она актуальна.

MSI (s) (A4:58) [10:46:09:130]: Executing op: CustomActionSchedule(Action=_78D3A615_0FDF_491D_8BD0_4AA0A0DAE3C2,ActionType=3090,Source=C:\inetpub\wwwroot\TFBIC.RCT.WCFWebServicesSetup\XmlPreprocess.exe,,CustomActionData=/x:"c:\Source\TFBIC.RCT.BizTalk\TFBIC.RCT.BizTalk.Deployment\EnvironmentSettings\SettingsFileGenerator.xml" /i:"C:\inetpub\wwwroot\TFBIC.RCT.WCFWebServicesSetup\web.config"  /e:QA)
MSI (s) (A4:58) [10:46:09:728]: Note: 1: 1722 2: _78D3A615_0FDF_491D_8BD0_4AA0A0DAE3C2 3: C:\inetpub\wwwroot\TFBIC.RCT.WCFWebServicesSetup\XmlPreprocess.exe 4:  
MSI (s) (A4:58) [10:46:09:728]: Note: 1: 2262 2: Error 3: -2147287038 
MSI (c) (E0:C8) [10:46:09:763]: Note: 1: 2262 2: Error 3: -2147287038 
DEBUG: Error 2835:  The control ErrorIcon was not found on dialog ErrorDialog
The installer has encountered an unexpected error installing this package. This may indicate a problem with this package. The error code is 2835. The arguments are: ErrorIcon, ErrorDialog, 
**Error 1722. There is a problem with this Windows Installer package. A program run as part of the setup did not finish as expected. Contact your support personnel or package vendor.**  Action _78D3A615_0FDF_491D_8BD0_4AA0A0DAE3C2, location: C:\inetpub\wwwroot\TFBIC.RCT.WCFWebServicesSetup\XmlPreprocess.exe, command:  
MSI (s) (A4:58) [10:46:11:630]: Note: 1: 2262 2: Error 3: -2147287038 
MSI (s) (A4:58) [10:46:11:630]: Product: TFBIC.RCT.WCFWebServices -- Error 1722. There is a problem with this Windows Installer package. A program run as part of the setup did not finish as expected. Contact your support personnel or package vendor.  Action _78D3A615_0FDF_491D_8BD0_4AA0A0DAE3C2, location: C:\inetpub\wwwroot\TFBIC.RCT.WCFWebServicesSetup\XmlPreprocess.exe, command:  

Action ended 10:46:11: InstallExecute. Return value 3.
MSI (s) (A4:58) [10:46:11:633]: User policy value 'DisableRollback' is 0
MSI (s) (A4:58) [10:46:11:633]: Machine policy value 'DisableRollback' is 0

ПРИМЕЧАНИЕ: получил вышеуказанный след, выполнив это:

msiexec / i "TFBIC.RCT.WCFWebServicesSetup.msi" / L * V "C: \ logs \ WebServiceInstall.log"

Обновление: на основе комментариев ниже - XmlPreprocess.exe (мой CustomAction) возвращает ненулевой код возврата. Так как я могу отладить это? Мне нужно увидеть результаты, которые обычно будут в командном окне.

Обновление 01/07: Кажется, что это невозможно отладить, не увидев вывод программы - это то, что мне действительно нужно. Когда установщик выдает ошибку, я могу видеть файлы в этом каталоге до тех пор, пока не нажму кнопку ОК, и он не удалит их все. Я иду в командную строку, введите xmlpreprocess.exe, а затем скопируйте / вставьте точно такую ​​же строку из журнала выше "/x:"c:\Source\TFBIC.RCT.BizTalk\TFBIC.RCT.BizTalk.Deployment\EnvironmentSettings\SettingsFileGenerator .xml "/i:"C:\inetpub\wwwroot\TFBIC.RCT.WCFWebServicesSetup\web.config" / e: QA ", и все работает нормально.

Я вижу мнение Райана о пропавшем файле, спасибо за это. Но могут быть десятки потенциальных ошибок, которые должны быть четко отображены в выходных данных программы XmlPreprocess. Наверняка есть какой-нибудь способ увидеть выход?

Два возможных отсутствующих файла: 1) сам web.config (он есть) 2) имя файла, который вводит пользователь.

Насколько я могу судить, нет способа проверить, что пользователь ввел правильное имя файла, и в диалоговых окнах установки нет "средства выбора файлов". Правильный? или нет?

Так что даже если пользователь ввел неверное имя файла, мне нужно дать ему лучшее сообщение, чем «Программа, запущенная как часть установки, завершилась не так, как ожидалось. Обратитесь в службу поддержки или к поставщику пакета».

Может быть, я должен написать свою собственную оболочку C # для XmlPreprocess и вызвать ее, затем перехватить вывод и прочитать его ???

Ответы [ 2 ]

2 голосов
/ 08 января 2010

Как и в вашем предыдущем вопросе , где я предложил использовать cmd.exe /C XmlPreProcess.exe ... для перенаправления, для отладки вы можете попробовать использовать /K вместо /C. Тогда любой вывод должен остаться, и вы сможете работать в контексте MSI во время ошибки.

Что я действительно подозреваю, так это проблема планирования ваших пользовательских действий. Если это действие является немедленным, запланировано до InstallFinalize и предназначено для работы с файлом, который вы будете устанавливать, оно будет выполнено до того, как файлы будут установлены в то место, которое вы ожидаете. Правильное исправление для этого обычно состоит в том, чтобы запустить действие в сценарии (также называемое отложенным), чтобы при планировании его между InstallFiles и InstallFinalize оно фактически выполнялось в этом соответствующем месте.

Что касается предоставления более совершенных ошибок для ваших конечных пользователей или предоставления им возможности поиска файла, то они оба будут выполнять пользовательские действия и, вероятно, должны быть действиями DLL (действия EXE могут обеспечивать только обратную связь по принципу "пройти / не пройти"). Это будет ваш выбор, лучше ли (или проще) предоставить диалоговое окно просмотра или проверить путь, предоставленный пользователем. Я не уверен, сколько из этого вы можете сделать в проекте установщика Visual Studio (что, как я предполагаю, вы используете в своих тегах).

1 голос
/ 06 января 2010

Да, ErrorIcon - это просто шум, и его можно игнорировать. Сейчас я нахожусь в процессе удаления этого «шума» из моего MSI, чтобы я мог правильно отладить.

Ошибка вызвана вашим пользовательским действием, возвращающим ошибку Windows 1722.

Запуск 'net helpmsg 1722' в командной строке приводит к выдаче;

 The RPC server is unavailable.

Так что эта команда делает что-то, что либо зависит от службы локального сервера RPC (не запущено, что странно, потому что это важно для Windows), либо удаленный сервер сообщает об этом обратно.

...