Разбираемся в подробной трассировке .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: взят из одной из моих форм пользовательского интерфейса, а значение /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 и вызвать ее, а затем перехватить вывод и прочитать его ???