Как отладить сбой настраиваемого действия в проекте MSI/Setup
Вопрос
Для настраиваемого действия я устанавливаю имя для XmlPreprocess.exe (утилита CodePlex).
и аргументы:/x:"[SETTINGSFILE]" /i:"[TARGETDIR]web.config" /e:[ENVIRONMENTBUTTON] [CUSTOMSETTINGS] >[TARGETDIR]XmlPreProcess.log
Предполагается, что SETTINGSFILE поступает со страницы пользовательской формы, которую я добавил, а ENVIRONMENTBUTTON — это значение одного из моих переключателей.
Есть ли способ заставить перенаправление работать?Файл .log не создается.Есть ли другой способ увидеть результаты специального действия?Как я могу вообще подтвердить, что оно запустилось?А что, если я захочу посмотреть, какие пароли ему были отправлены?
Обновление 3:- Дополнительные сценарии того, что я пробовал, см. здесь:http://xmlpreprocess.codeplex.com/Thread/View.aspx?ThreadId=79454
Спасибо,
Нил
Обновлять:Я только что написал быстрый VBScript для проверки своих параметров.
dim fso, oFile
set fso = Createobject("Scripting.FileSystemObject")
set oFile = fso.CreateTextFile("VBScriptOut.txt")
if WScript.Arguments.Count < 2 then
oFile.Writeline("Number of arguments was only = " & WScript.Arguments.Count)
else
oFile.WriteLine("SETTINGSFILE=" & WScript.Arguments.Item(0))
oFile.WriteLine("ENVIRONMENTBUTTON=" & WScript.Arguments.Item(1))
end if
oFile.close
Никакой файл VBScriptout.txt не был создан, поэтому я не думаю, что он вообще запускался (поэтому я предполагаю, что XmlPreprocess тоже даже не запущен).
Я включил файл InstalLVerification.vbs в качестве дополнительного действия в разделе «Установить».Я установил условие = True в окне свойств.Я установил CustomActionData на:"[ФАЙЛ НАСТРОЙКИ]" [КНОПКА ОКРУЖЕНИЯ]
Обновление 2:Теперь я понял, что условие не должно быть «Истина».Я либо удаляю его, либо ставлю «Не установлено».
Я получаю необъяснимую ошибку в XmlPreprocess и не могу запустить VBScript.Я также попробовал запустить его с помощью CScript64.exe.
Решение
Только командная строка (и иногда другие инструменты) используют символ «больше» для обозначения перенаправления вывода.Установщик Windows просто вызывает API Win32 CreateProcess, который не обрабатывает этот символ.Таким образом, ваша попытка записать результаты не сработает.Возможно, вы можете переписать свою команду так, чтобы она выглядела так cmd.exe /c XmlPreprocess.exe /x ... > [TARGETDIR]XmlPreprocess.log
(может потребоваться дополнительное цитирование).
В целях отладки обычно можно получить гораздо больше информации, просмотрев подробный журнал процесса установки.Он будет включать список свойств, запущенных им настраиваемых действий и их кодов возврата.Я думаю, что в вашем случае он даже будет включать полностью отформатированную командную строку, передаваемую приложению.
Как вы сказали в Обновлении 2, обратите внимание, что условие True
на самом деле означает поиск, является ли свойство имени True
определено.Если вы хотите, чтобы что-то всегда было правдой, используйте значение 1
.