PDA

Просмотр полной версии : Настройка пре-билда


TanaTiX
27.02.2012, 16:41
Во FlashDevelop-е в настройках проекта в Pre-Build Command Line пишу
"$(ProjectDir)\someFile.exe"
При этом виснет весь девелоп до перезагрузки. Никаких окон не появляется, но должно появляться консольное окно (это весь функционал exe-программы). Почему так, как побороть?

alexcon314
27.02.2012, 17:23
попробуй запускать через батник

wvxvw
27.02.2012, 17:39
А Вондовс понимает что-нть типа executable &
В смысле, чтобы не в том же процессе запускался, а в дочернем / вообще в отдельном.

TanaTiX
28.02.2012, 00:01
Путем различных поисков и экспериментов достигнуто следующее:
Содержимое батника:
start Full_path_to_file\ExampleForBat.exe
taskkill /IM cmd.exe /f
2я строка при этом убивает 1й процесс, а 2й, свежезапущенный, остается
И особое внимание на то, что путь должен быть абсолютный, а не относительный, т.к. батник не знает с какой позиции ему начинать смотреть папки.
В настройках девелопа
$(ProjectDir)\ExampleForBat\bin\Debug\bat.bat
На выходе:
девелоп не виснет, но ждет окончания работы прогарммы
exe запускается и сам по себе работает корректно
Компиляция не происходит, в output:
Running process: ExampleForBat.as3proj" -ipc b9d2b83d-65a5-43a1-8271-82b35178de0a -version "4.6.0; 3.1" -compiler "D:\Program Files (x86)\FlashDevelop\Tools\flexsdk" -notrace -library "D:\Program Files (x86)\FlashDevelop\Library"
Building ExampleForBat
Running Pre-Build Command Line...
cmd: ExampleForBat\bin\Debug\bat.bat

ExampleForBat>start ExampleForBat\bin\Debug\ExampleForBat.exe

ExampleForBat>taskkill /IM cmd.exe /f
“бЇҐи*®: Џа®жҐбб "cmd.exe", б Ё¤Ґ*вЁдЁЄ*в®а®¬ 5896, Ўл« §*ўҐаиҐ*.
Build halted with errors.
Done(1)

Часть путей от дисков сократил.

В общем вот такая петрушка. На этом и застопорился. Может кто еще что подскажет?

ЗЫ. Как в output-е избавиться от нечитаемых символов, типа бЇҐ

alexcon314
28.02.2012, 13:39
А зачем консоль бьешь? Не надо. Оно само отвалится, если ехе - консольный и корректно отработал.
Насчет путей не уверен, но консоль запускаться должна с CurrentDir=батникDir, т.е в папке самого батника.
ЗЫ. В пребилде бить плеер хорошо, ибо подвисает при дебуге нередко.

wvxvw
28.02.2012, 15:59
Помоему в Виндовсе чтобы отобразить текущую директорию %PWD% - но может как-то не совсем так :)
Т.е. посмотри откуда FD батник запускает, не факт, что он его из его же директории запускает.

Ну и как уже было сказано, если ExampleForBat.exe заканчивает работу со статусом 0, то он как бы сам и закроется.
Помоему, start /B - если окошко консоли мешает. Т.е. так оно запустится без того, чтобы создавать новое окно.
chcp <кодировка> - на сколько я знаю, меняет кодировку в консоли.

TanaTiX
28.02.2012, 22:58
А зачем консоль бьешь?
Пытался следовать этому совету:
В смысле, чтобы не в том же процессе запускался, а в дочернем / вообще в отдельном.
Помоему в Виндовсе чтобы отобразить текущую директорию %PWD% - но может как-то не совсем так :)
Да, не совсем. %cd% Главное было дать направление для поиска :)
Т.е. посмотри откуда FD батник запускает, не факт, что он его из его же директории запускает.Батник отрабатывает и запускает приложение. После этого девелоп пытается безуспешно что-то сделать.
Ну и как уже было сказано, если ExampleForBat.exe заканчивает работу со статусом 0
Он не должен заканчивать работу. Да, можно запускать приложение, не зависимо от манипуляций в ФД, но этот вариант - не вариант.

Сейчас поменял пути и атрибут B при start-е согласно рекомендациям. Поведение следующее (кстати, если команду из пребилда перенести в постбилд, ничего не меняется):
Запускается батник, запускается приложение, консоль остается висеть и ждет команды, в output девеолпа выводится сообщение, что компиляция прошла успешно и все замирает. Откомпиленный проект в дебаге открывается только после закрытия консоли (способ завершения значения не имеет)

alexcon314
29.02.2012, 08:33
Чтобы консоль закрыть можно в конец батника добавить exit.
Провел у себя такой тест.
В папку (где лежит .as3proj) с проектом вложил батник и myExe.exe.
start myExe.exe
exit
В пребилд вписал start.bat.
Результат: ехе стартует, консоль не показвается, в процессах ее нету. Но пока не закроешь ехе билд не продолжается.
В постбилд вписал start.bat.
Результат: ехе стартует, консоль не показвается, в процессах ее нету. Билд суксессфул.Но пока не закроешь ехе плеер не запускается.
Ну, хоть с путями все понятно.
Собственно, вместо myExe можно запускать для наглядности calc или notepad:
start notepad
exit
Результат тот же.
Проблема действительно имеет место быть. TanaTiX, сори, сразу не въехал.
В чем может быть причина? Надо посмотреть сорсы FD. Внешне похоже на то, что пост/пребилды запускаются в отдельном потоке, к которому джойнится до его завершения основной поток, тот, в которм выполняется компиляция и запуск плеера. Вспомогательный поток для пре/постбилда имеет свойство завершаться после завершения всех запущенных им команд, будь то батник или ехе. С одной стороны вроде бы логично, с другой - вот такие траблы.

Добавлено через 5 часов 21 минуту
Ок. В сорсах бегло найти ничего толкового не удалось, да может это и не FD проблема, а fcsh.
Решение.
Расположение файлов .bat и .exe как я указал выше.

REM start.bat
start start.vbs
exit
Добавим туда же, в папку проекта start.vbs

' start.vbs
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run "myExe.exe", 1, false
Прописываем start.bat в пре/постбилд.
Билдим.
Путь к ехе можно указать полный и положить его куда хочешь.

wvxvw
29.02.2012, 19:18
Раз уж тут речь зашла о VB... а что будет если FD запустить из под Cygwin? Может так получится, что для него шеллом будет bash, а не cmd? :)

alexcon314
01.03.2012, 08:42
Мысль, конечно, интересная. Поменять шило на мыло :D.
Вообще, занятная ассоциация: VB<->cygwin.. мозг клинит.

wvxvw
01.03.2012, 17:47
Ну в этом контексте не важно, что это VB, смысл был скорее в том, что он создает свой шелл. Ну, а если бы шеллом был bash, то можно было через него создать новый шелл, если нужно, не используя дополнительные языки :)