|
Вернуть результат работы приложения
|
|||
---|---|---|---|
#18+
Хочу одним приложением, запускать второе и ждать его завершения, но не просто окончания, а с каким-то результатом. Как что-то вернуть из подопытного главному,? :) Хотя бы код той же ошибки или путь к файлу с детальной информацией ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2022, 10:29 |
|
Вернуть результат работы приложения
|
|||
---|---|---|---|
#18+
antox, второе приложение твоё? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2022, 10:36 |
|
Вернуть результат работы приложения
|
|||
---|---|---|---|
#18+
Exit(IntegerCodeResult) не вариант ? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2022, 10:45 |
|
Вернуть результат работы приложения
|
|||
---|---|---|---|
#18+
antox, Функция написана давно, уже не помню всех нюансов. Но она работает(ла). Основной смысл в том, что кроме запущенного процесса надо и о своем родном не забывать, обрабатывать очередь сообщений. Вижу там внутри пару других личных функций, они очевидны по названию, свои напишете. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2022, 12:45 |
|
Вернуть результат работы приложения
|
|||
---|---|---|---|
#18+
antox Как что-то вернуть из подопытного главному,? :) antox код той же ошибки antox путь к файлу с детальной информацией ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2022, 13:49 |
|
Вернуть результат работы приложения
|
|||
---|---|---|---|
#18+
_Vasilisk_ Проще всего в само приложение передать имя файла Если запускаемое приложение собственной разработки, есть довольно способов сигнализации и обмена данными. Проблема возникает, если приложение чужое. Тогда приходится забирать то, что оно официально отдает, а это во многих случаях лишь код возврата, а в еще больших случаях и кода нет, т.е. он всегда нулевой. Интересно, кстати, вот присутствующие здесь разработчики выставляют в ExitCode когда-нибудь что-нибудь отличное от нуля? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2022, 17:26 |
|
Вернуть результат работы приложения
|
|||
---|---|---|---|
#18+
shalamyansky Интересно, кстати, вот присутствующие здесь разработчики выставляют в ExitCode когда-нибудь что-нибудь отличное от нуля? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2022, 17:43 |
|
Вернуть результат работы приложения
|
|||
---|---|---|---|
#18+
YuRock Когда это важно и анализируется - ставим. У нас система обновления основана на кодах возврата и чтении логов. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2022, 17:47 |
|
Вернуть результат работы приложения
|
|||
---|---|---|---|
#18+
Спасибо, работает :) Пускач: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59.
Дочерний: Код: pascal 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2022, 07:30 |
|
Вернуть результат работы приложения
|
|||
---|---|---|---|
#18+
antox, может вам это пригодится: Делюсь: запуск внешней программы + перехватывает её вывода + вкусняшки ... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2022, 13:43 |
|
Вернуть результат работы приложения
|
|||
---|---|---|---|
#18+
antox Спасибо, работает Не за что. Потому что вы не использовали основную идею, ради которой применена именно функция MsgWaitForMultipleObjects , и уходите в глухое ожидание. Это было бы допустимо, если ваше вызывающее приложение тоже было бы консольным, как и вызываемое, однако, судя по примеру, это вполне себе оконное приложение. Для системы и для пользователя оно будет "зависшим", неуправляемое неотрисованное окно, которое пользователь, не понимая, что это за хрень, в конце концов прибьет через менеджер процессов. А в случае завершения сеанса прибьет система, но не сразу, а задав пугающий, но справедливый вопрос о несохраненных данных. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2022, 15:17 |
|
Вернуть результат работы приложения
|
|||
---|---|---|---|
#18+
Хм, буду дорабатывать... ... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2022, 15:47 |
|
Вернуть результат работы приложения
|
|||
---|---|---|---|
#18+
shalamyansky antox Спасибо, работает Не за что. Потому что вы не использовали основную идею, ради которой применена именно функция MsgWaitForMultipleObjects , и уходите в глухое ожидание. Это было бы допустимо, если ваше вызывающее приложение тоже было бы консольным, как и вызываемое, однако, судя по примеру, это вполне себе оконное приложение. Для системы и для пользователя оно будет "зависшим", неуправляемое неотрисованное окно, которое пользователь, не понимая, что это за хрень, в конце концов прибьет через менеджер процессов. А в случае завершения сеанса прибьет система, но не сразу, а задав пугающий, но справедливый вопрос о несохраненных данных. При MsgWaitForMultipleObjects процесс не блокируется, удобно :) Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54.
... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2022, 16:28 |
|
Вернуть результат работы приложения
|
|||
---|---|---|---|
#18+
antox, Можно и так. Только вы, я надеюсь, понимаете, что у вас во время ожидания приложение живет полноценной жизнью, мышиным и клавиатурным вводом и прочими удовольствиями. Я у себя оставлял только перерисовку и команды на выход, прочее просто выбирал из очереди и не обрабатывал. Но это ваше приложение и ваша логика, конечно. И еще вы понимаете, что если вдруг получите WM_QUIT, то до конца процедуры код никогда не дойдет, приложение умрет где-то в глубине DispatchMessage. А так все хорошо, прекрасная маркиза, все хорошо, все хорошо. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2022, 16:42 |
|
Вернуть результат работы приложения
|
|||
---|---|---|---|
#18+
shalamyansky antox, Можно и так. Только вы, я надеюсь, понимаете, что у вас во время ожидания приложение живет полноценной жизнью, мышиным и клавиатурным вводом и прочими удовольствиями. Я у себя оставлял только перерисовку и команды на выход, прочее просто выбирал из очереди и не обрабатывал. Но это ваше приложение и ваша логика, конечно. И еще вы понимаете, что если вдруг получите WM_QUIT, то до конца процедуры код никогда не дойдет, приложение умрет где-то в глубине DispatchMessage. А так все хорошо, прекрасная маркиза, все хорошо, все хорошо. Я так понимаю, что можно просто кнопку запуска дочернего перевести в disable, в этом случае как-бы будет доступен только тот же выход? Надо только иметь возможность при закрытии формы, из которой запускается процесс, убить этот дочерний процесс А по WM_QUIT не совсем понятно, при каком раскладе это может произойти и как отловить? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2022, 16:57 |
|
Вернуть результат работы приложения
|
|||
---|---|---|---|
#18+
shalamyansky antox, Можно и так. Только вы, я надеюсь, понимаете, что у вас во время ожидания приложение живет полноценной жизнью, мышиным и клавиатурным вводом и прочими удовольствиями. Я у себя оставлял только перерисовку и команды на выход, прочее просто выбирал из очереди и не обрабатывал. Но это ваше приложение и ваша логика, конечно.. И чего только не придумают, лишь бы в тред не выносить... ... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2022, 17:25 |
|
Вернуть результат работы приложения
|
|||
---|---|---|---|
#18+
Fr0sT-Brutal И чего только не придумают, лишь бы в тред не выносить... Если приложению есть чем заняться в с пользователем во время ожидания, я бы да, создал отдельный поток, который и сообщил бы мне о событии и результате, когда те состоялись бы. Асинхронность, как она есть. А если бы вторичное приложение было моим, просто его и попросил бы сделать это, без лишних потоков. Но если приложению делать нечего, кроме как ждать, предлагаемый способ вполне разумен. Надо только адекватно реагировать на просьбы пользователя и системы закрыться. Все равно ведь закроют, только грубо. Зачем на грубость нарываться? antox А по WM_QUIT не совсем понятно, при каком раскладе это может произойти и как отловить? Это и есть просьба системы или пользователя закрыться, см. выше. Требование даже, просьбы раньше были. Кнопка disabled, это всего лишь кнопка disabled, второй раз эту кнопку не нажмут. Но есть еще много других кнопок и крестиков... ... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2022, 17:59 |
|
Вернуть результат работы приложения
|
|||
---|---|---|---|
#18+
shalamyansky Fr0sT-Brutal И чего только не придумают, лишь бы в тред не выносить... Если приложению есть чем заняться в с пользователем во время ожидания, я бы да, создал отдельный поток, который и сообщил бы мне о событии и результате, когда те состоялись бы. Асинхронность, как она есть. А если бы вторичное приложение было моим, просто его и попросил бы сделать это, без лишних потоков. Но если приложению делать нечего, кроме как ждать, предлагаемый способ вполне разумен. Надо только адекватно реагировать на просьбы пользователя и системы закрыться. Все равно ведь закроют, только грубо. Зачем на грубость нарываться? antox А по WM_QUIT не совсем понятно, при каком раскладе это может произойти и как отловить? Это и есть просьба системы или пользователя закрыться, см. выше. Требование даже, просьбы раньше были. Кнопка disabled, это всего лишь кнопка disabled, второй раз эту кнопку не нажмут. Но есть еще много других кнопок и крестиков... Тогда на закрытие формы в основном приложении повешу функцию по уничтожению дочернего Код: pascal 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2022, 06:50 |
|
Вернуть результат работы приложения
|
|||
---|---|---|---|
#18+
antox Код: pascal 1.
Жестко, как серпом по яйцам. Мягче надо бы, мягче... Но речь шла не о том, как закрыть дочерний процесс, а как первичный процесс должен правильно отреагировать на полученный WM_QUIT. Посмотрите на свой код. Если вы во время ожидания получите WM_QUIT, вы его выберете из очереди, выйдете из цикла ожидания и вернетесь в главный цикл приложения, как будто ничего не произошло. Должны были закрыться, а вы не закрылись. Потому что для главного цикла в очереди уже не осталось никакого WM_QUIT. Я в таком случае отправлял дополнительный WM_QUIT в хвост очереди. Процедура аккуратно завершается, код выходит в основной цикл, а там его уж поджидает WM_QUIT и все происходит стандартным образом. Можно, конечно, придумать и другие схемы, вольному воля. Главное - аккуратно. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2022, 14:22 |
|
Вернуть результат работы приложения
|
|||
---|---|---|---|
#18+
shalamyansky Я в таком случае отправлял дополнительный WM_QUIT в хвост очереди. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2022, 18:20 |
|
Вернуть результат работы приложения
|
|||
---|---|---|---|
#18+
_Vasilisk_, Это если в области видимости есть Application, да и вообще, если он есть и цикл сообщений крутится через Application.Run, что необязательно. В контексте библиотечных функций (в смысле вынесенных из юнитов форм в отдельные юниты) обычно нет никакого Application. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2022, 18:37 |
|
|
start [/forum/topic.php?fid=58&msg=40128942&tid=2036678]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
33ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
others: | 273ms |
total: | 401ms |
0 / 0 |