MKN Да не, это проще - я уже с Far TE3 имел бяку - Far.exe запущен - не переписался - ругань со стороны плагинов на старый Far. [more=Задачка решается на раз] в заголовке скрипта добавляем:
!include ProcLib.nsh /* или nsProcess.nsh но, тогда пиши свой парсер ошибок */
в коде, например в .onInit
Function unsuppm
StrCmp $lng 1049 +1 +2
MessageBox MB_OK|MB_ICONSTOP "Извините, но это не поддерживаемая версия Windows.$\nУстановка ... на этой платформе невозможна." IDOK +2
MessageBox MB_OK|MB_ICONSTOP "Sorry, but this unsupported Windows version.$\nSetting up .... on this platform is impossible." IDOK +1
Quit
Return
FunctionEnd
Function syserrm
StrCmp $lng 1049 +1 +2
MessageBox MB_OK|MB_ICONSTOP "Извините, но возникла системная ошибка с кодом $R0 и Установка прервана.$\nПожалуйста, обратитесь к Администратору для решения этой проблемы." IDOK +2
MessageBox MB_OK|MB_ICONSTOP "Sorry, but detected is system error code is $R0 and Setup is aborted.$\nPlease, take to Administrator for resolving this problem."
Quit
Return
FunctionEnd
Function acessd
StrCmp $lng 1049 +1 +2
MessageBox MB_OK|MB_ICONSTOP "Извините, но у Вас нет прав для продолжения Установки.$\nПожалуйста, обратитесь к Администратору для предоставления Вам необходимых прав." IDOK +2
MessageBox MB_OK|MB_ICONSTOP "Sorry, but You don't have rights for continue Setup.$\nPlease, take to Administrator for get You needed rights."
Quit
Return
FunctionEnd
Function manterm
StrCmp $lng 1049 +1 +2
MessageBox MB_OK|MB_ICONSTOP "Извините, но некоторые процессы не удалось завершить$\nавтоматически. Пожалуйста, завершите их вручную ипользуя$\nДиспетчер задач и запустите Установку снова." IDOK +2
MessageBox MB_OK|MB_ICONSTOP "Sorry, but some proces is automatical terminate is$\nfiled. Please, close this program manually using Task Manager$\nand run Setup again if You whole continue."
Quit
Return
FunctionEnd
Function .onInit
.....
${nsProcess::FindProcess} "main.exe" $R0
IntCmp $R0 603 +2 +1 lblerr
${nsProcess::CloseProcess} "main.exe" $R0
StrCmp $R0 0 end
StrCmp $R0 603 end
lblerr:
StrCmp $R0 605 +6
IntCmp $R0 606 +4 +1 +4
StrCmp $R0 601 +5
StrCmp $R0 602 +5
Call syserrm
Call unsuppm
Call acessd
Call manterm
end:
${nsProcess::Unload}
FunctionEnd[/more] и даже без два и танцев с бубном. Подобный же парсер и в ProcLib.nsh есть, и там даже свою ругань добавлять нет нужды - уже готовая есть.
А с локалью и того проще - а кто мне помешает поставить в INI язык путём расшифровки текущего значения $LANGUGE? Только придётся написать кучу StrCmp $LANGUAGE <lbl> и проваливаться вниз по мере их не выполнения поставив в конце дефолтный язык. И насчёт блокировки ты не совсем прав - если файл заблокирован для исключения потери данных лучше прервать установку, это грамотно, а иначе - риск может оказаться и 100%, и только для исключительных случаев использовать перезапись в режиме onReboot.