|
|
|
Чтение результатов работы консольного приложения
|
|||
|---|---|---|---|
|
#18+
Только что прислали ответ: ... is a "console mode" application ; to collect in real time the logged line, you application needs to: - run sendfax.exe and to "redirect standard output" (stdout) - your application should then read from redirected stdout (character by character) We do not have sample code for such system programming; however you should find some on the WEB. А то что мы тут делали это не то же самое? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2008, 16:47 |
|
||
|
Чтение результатов работы консольного приложения
|
|||
|---|---|---|---|
|
#18+
Дмитрий77Только что прислали ответ: ... is a "console mode" application ; to collect in real time the logged line, you application needs to: - run sendfax.exe and to "redirect standard output" (stdout) - your application should then read from redirected stdout (character by character) We do not have sample code for such system programming; however you should find some on the WEB. А то что мы тут делали это не то же самое?В принципе, тоже самое. Во всяком случае они намекают что пайпов будет достаточно. А в твоих экспериментах пайпы не заработали? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2008, 17:42 |
|
||
|
Чтение результатов работы консольного приложения
|
|||
|---|---|---|---|
|
#18+
Console is the most flexible mode. Sendfax.exe outputs the result in real time ; command line redirection to file (using ">") may however produce the file only once operation is complete or enough data was collected (but should be "command line" = "shell" = ~"DOS" specific behavior). If you VB app redirects the console output (stdout) when executing sendfax.exe, then your VB app can read each line as soon as they are produced by sendfax.exe (and write it in real-time to a file, …). Note that you may be able in VB to redirect stdout directly to a file with some code that may look as follow (search Google for: +"redirect stdout" +createfile): 1) CreateFile 2) Redirect stdout to handle of file previously created (set proper handle in STARTUPINFO that will be passed to CreateProcess) 3) execute "sendfax" using CreateProcess 4) close handle. There are no plans to change this utility. Я уже и на C++ этот код попробовал (поиск привел именно к той статье, что вы мне указали, там где Note:) -результат тот же Ощущение такое что они намекают на тот самый код, который вы привели, (или на что-то более тонкое???) "character by character", но код то этот не работает в данном конкретном случае и они это я так понимаю не проверяли. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2008, 18:00 |
|
||
|
Чтение результатов работы консольного приложения
|
|||
|---|---|---|---|
|
#18+
Сделал так как они сказали что называется в лоб: Код: plaintext 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. ping -работает "как надо" то что надо - работает как и во всех предыдущих рассмотрениях, т.е. полный вывод лишь в конце. P.S. За C++ просьба не язвить. Я к нему прибегаю в крайних случаях. Ясно одно: если этот код на C++ не работает,то будучи переделанным на VB он также не заработает "как надо". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2008, 04:00 |
|
||
|
Чтение результатов работы консольного приложения
|
|||
|---|---|---|---|
|
#18+
что-то они явно не договаривают, раз примера нет. пошли им свой, пусть скажут , что не так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2008, 18:15 |
|
||
|
Чтение результатов работы консольного приложения
|
|||
|---|---|---|---|
|
#18+
У меня тут возникла простая трезвая мысль. В любой консоли ручками можно сделать Выделить все -> Копировать(или Enter), потом пойти в блокнот и написать "вставить".Эффект по сути требуемый будет. Это ведь можно сделать программно? Единственное, используется буфер обмена и если таких консолей будет 4 (а информацию разумно считывать хотя бы 1 раз в секунду)+ я еще сижу работаю, то информация может перекреститься-потеряться и будет бардак. Т.е. идея копирования всего экрана в данном случае разумна(информации не бог весть сколько), но только не в буфер обмена. Надо подумать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2008, 01:16 |
|
||
|
Чтение результатов работы консольного приложения
|
|||
|---|---|---|---|
|
#18+
Ну вот, вполне рабочий вариант получился: Код: plaintext 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. Код: plaintext 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. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. Теперь вот задался двумя вопросами: 1) Как запустить консоль невидимо от пользователя, ибо Shell(AppToRun, vbHide ) в ShellAndContinue здесь не поможет, консоль и так уже стартовала vbNormal 2) Не возникнет ли у меня проблем, если мое приложение будет запускать несколько таких консолей одновременно? Уж больно Couldn't allocate console при отладке сильно много ругалось. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2008, 00:01 |
|
||
|
Чтение результатов работы консольного приложения
|
|||
|---|---|---|---|
|
#18+
Как запустить невидимо, похоже понял: После AllocConsole() надо добавить: Код: plaintext Код: plaintext 1. Как запустить несколько консолей из одного приложения таким методом, пока не разобрался, поигрался,возникло предположение что никак. Если это так, то надо писать что-то типа console.exe [proga.exe] [logfile-name.txt] Т.е. console.exe запускает proga.exe и в файл logfile-name.txt в REAL-TIME сваливаются сообщения от proga.exe А центральное приложение запускает эти самые console.exe через shellandcontinue , по таймеру заглядывает в logfile-name.txt, до завершения console.exe просто красиво отображает информацию-чего там происходит, а по выходу окончательно анализирует logfile-name.txt и протоколирует результаты работы. Как-то уж очень навороченно получается...проще конечно из центрального приложения запускать несколько консолей и хранить результаты их работы в массиве переменных (textbox-ах), а не в файлах ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2008, 03:10 |
|
||
|
Чтение результатов работы консольного приложения
|
|||
|---|---|---|---|
|
#18+
1)Можно конечно себя обезопасить, сделав так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 2) http://msdn2.microsoft.com/en-us/library/ms681944(VS.85).aspx A process can be associated with only one console, so the AllocConsole function fails if the calling process already has a console. Иными словами, из одного приложения можно управлять не более чем одной консолью. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2008, 05:03 |
|
||
|
Чтение результатов работы консольного приложения
|
|||
|---|---|---|---|
|
#18+
Забыл в код дописать, иначе не понятно Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2008, 05:06 |
|
||
|
Чтение результатов работы консольного приложения
|
|||
|---|---|---|---|
|
#18+
Дмитрий771) Как запустить консоль невидимо от пользователя, ибо Shell(AppToRun, vbHide ) в ShellAndContinue здесь не поможет, консоль и так уже стартовала vbNormal Запускать используя CreateProcess задавая 6-м параметром DETACHED_PROCESS. Честно говоря все не читал, но что-то долго мучаетесь... У CreateProcess есть три параметра - им достаточно передавать указатели возвращенные CreateFile. Вот и все - все работает. Использовал это дело еще лет 8..10 назад... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2008, 10:43 |
|
||
|
Чтение результатов работы консольного приложения
|
|||
|---|---|---|---|
|
#18+
Вы не забывайте, что я сначала вызываю консоль через AllocConsole(), а только потом создаю в ней CreateProcess, а AllocConsole() параметров не имеет. Если бы я сначала делал CreateProcess, а потом AttachConsole(), то возможно ваш совет и пременился бы с успехом, хотя с AttachConsole() еще разбираться надо. А в моем случае боюсь тот вариант, что я сам нашел единственный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2008, 11:21 |
|
||
|
Чтение результатов работы консольного приложения
|
|||
|---|---|---|---|
|
#18+
Дело закончилось тем, что от разработчиков пришел новый exe-шник от 14.01 Please find attached an update that should enable redirection to file (from command prompt or CreateProcess) to operate in real time. Our tests showed it was working in real time from command prompt. Наши тесты тоже как ни странно это показали. Он "как надо" работает со всеми приведенными тут кодами, и даже корректно поддерживает "proga.exe > 1.txt", что вообще делает возможным элементарное 1) ShellAndContinue ("proga.exe > 1.txt") 2) FSys.OpenTextFile ("1.txt", forReading.. по таймеру ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2008, 00:54 |
|
||
|
Чтение результатов работы консольного приложения
|
|||
|---|---|---|---|
|
#18+
раскрутили наконец разработчиков тулзы, молодец ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2008, 17:27 |
|
||
|
Чтение результатов работы консольного приложения
|
|||
|---|---|---|---|
|
#18+
Дмитрий77Дело закончилось тем, что от разработчиков пришел новый exe-шник от 14.01 ...Он "как надо" работает со всеми приведенными тут кодами, и даже корректно поддерживает "proga.exe > 1.txt", что вообще делает возможным элементарноеСкорее всего, старый вариант забывал сливать буфера. А новый соотвественно сливает их каждый раз после новой строки... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2008, 17:45 |
|
||
|
Чтение результатов работы консольного приложения
|
|||
|---|---|---|---|
|
#18+
Дмитрий77Вы не забывайте, что я сначала вызываю консоль через AllocConsole(), а только потом создаю в ней CreateProcess, а AllocConsole() параметров не имеет. Если бы я сначала делал CreateProcess, а потом AttachConsole(), то возможно ваш совет и пременился бы с успехом, хотя с AttachConsole() еще разбираться надо. А в моем случае боюсь тот вариант, что я сам нашел единственный. А зачем, собственно, AllocConsole с сопутствующими танцами? Почему не просто CreateProcess? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2008, 14:38 |
|
||
|
Чтение результатов работы консольного приложения
|
|||
|---|---|---|---|
|
#18+
AndrFА зачем, собственно, AllocConsole с сопутствующими танцами? Почему не просто CreateProcess? Вы эту тему внимательно читали, сколько всего намучено было. Я свои проблемы решил , причем методом "proga.exe > 1.txt" без всякого програмирования. Но коль пошла такая пьянка, то ответьте на след.вопрос Будет ли работать следующий код: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Только сами ответьте на этот вопрос (желательно код, а не общие намеки), ответ будет мне интересен после такого объема изысканий. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2008, 16:46 |
|
||
|
|

start [/forum/topic.php?fid=60&msg=35056855&tid=2162805]: |
0ms |
get settings: |
9ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
55ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
75ms |
get tp. blocked users: |
1ms |
| others: | 223ms |
| total: | 399ms |

| 0 / 0 |
