|
Консольное приложение: нужен совет
|
|||
---|---|---|---|
#18+
Есть работающее WinForms приложение, простое, с одной главной формой и неколькоими батонами, как сделать, чтобы оно по флажку умело работать еще и в режиме консольного приложения: типа без формы, с выводом лога в консоль? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2018, 11:42 |
|
Консольное приложение: нужен совет
|
|||
---|---|---|---|
#18+
Нужно, чтобы оно прям натуральную консоль использовала? Или просто текстбокс на всю форму с черным фоном и белыми буквами? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2018, 11:52 |
|
Консольное приложение: нужен совет
|
|||
---|---|---|---|
#18+
Shocker.Pro, Это приложение работает так: в форме юзер отмечает нужные параметры: чекбоксы, комбобоксы и т.д и жмет батон "Экзэк" и оно выполняет набор команд на диске и в базе, рисует прогресс. Юзер хочет запускать его в тимсити сервере, там надо приложение без гуи, с командной строкой, все параметры можно передать через аргументы и чтобы лог писался. А натянуть дурилку на форму не получится. Ну, вот. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2018, 12:06 |
|
Консольное приложение: нужен совет
|
|||
---|---|---|---|
#18+
256k, Тога перегрузить вроде..... По флажку. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2018, 12:11 |
|
Консольное приложение: нужен совет
|
|||
---|---|---|---|
#18+
Есть вариант такой: Изначально приложение нужно делать консольным. В консольном приложении, если оно запущено без аргументов вызываете WinAPI функцию FreeConcole, что приведет к закрытию окна и освобождению консоли, затем создаете Application. Недостатком такого применения будет то, что консольное окно будет отображаться при каждом запуска, до момент FreeConsole. Код: c# 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2018, 12:20 |
|
Консольное приложение: нужен совет
|
|||
---|---|---|---|
#18+
Roman MejtesЕсть вариант такой: Изначально приложение нужно делать консольным. В консольном приложении, если оно запущено без аргументов вызываете WinAPI функцию FreeConcole, что приведет к закрытию окна и освобождению консоли, затем создаете Application. Недостатком такого применения будет то, что консольное окно будет отображаться при каждом запуска, до момент FreeConsole. Код: c# 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.
ясно, но, что значит "изначально"? оно уже есть финформс, хотелось бы прикрутить и такую возможность. А что избавиться от постоянного появления консоли никак? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2018, 12:24 |
|
Консольное приложение: нужен совет
|
|||
---|---|---|---|
#18+
256kясно, но, что значит "изначально"? оно уже есть финформс, хотелось бы прикрутить и такую возможность. А что избавиться от постоянного появления консоли никак?Если оно уже WinForms, вам не составит большого труда переключить его на "Console Application" в свойствах проекта. Гуглите методы AllocConsole(void) и AttachConsole и другие методы работы с консолью. Проблема в том, что Console.WriteLine будет криво работать, если приатачиться к родительскому процессу :( будут проблемы с перенаправлением ввода вывода, а консоль не будет ожидать завершение процесса, а сразу вернет управление в консоль, при этом вывод в консоль будет продолжаться параллельно с выводом другой программы. с FreeConsole самый быстрый, простой и рабочий вариант ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2018, 13:26 |
|
Консольное приложение: нужен совет
|
|||
---|---|---|---|
#18+
думаю есть еще 1 вариант, вы пишите Native приложение на С++, которое создаст домен, загрузит в него сборку вашего приложения и запустит. Перед этим оно аллоцирует консоль и выполнит все операции, которые требуются для работы pipe маршрутизации, тогда всё будет как вам хочется ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2018, 13:58 |
|
Консольное приложение: нужен совет
|
|||
---|---|---|---|
#18+
Roman Mejtesдумаю есть еще 1 вариант, вы пишите Native приложение на С++, которое создаст домен, загрузит в него сборку вашего приложения и запустит. Перед этим оно аллоцирует консоль и выполнит все операции, которые требуются для работы pipe маршрутизации, тогда всё будет как вам хочется Такое нашел, вроде не мигает консоль, когда не надо Код: c# 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2018, 14:17 |
|
Консольное приложение: нужен совет
|
|||
---|---|---|---|
#18+
256k, есть ещё такая штука: AttachConsole (ATTACH_PARENT_PROCESS). Если из консоли запукают, то проканает ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2018, 14:40 |
|
Консольное приложение: нужен совет
|
|||
---|---|---|---|
#18+
kealon(Ruslan)256k, есть ещё такая штука: AttachConsole (ATTACH_PARENT_PROCESS). Если из консоли запукают, то проканает запускать можно от куда угодно, но pipe'ы работать не будут и проблему с тем, что WinForms приложение немедленно возвращает управление тоже ни как не решается. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2018, 14:54 |
|
Консольное приложение: нужен совет
|
|||
---|---|---|---|
#18+
Roman Mejtes, ну пайпы это не консоль - речь вроде о консоли шла, и если консоли у родителя нет, то и подцепляться не к чему ну а в общем конечно принципиально, то что консольное\не консольное это флаг в заголовке исполнимого файла, и надо выбирать ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2018, 15:00 |
|
Консольное приложение: нужен совет
|
|||
---|---|---|---|
#18+
kealon(Ruslan), есть вариант проще, делайте 2 приложения на одной сборке или просто Console приложение, у которой в Reference стоит ваша неконсольная программа или наоборот и всех делов. Либо вариант с загрузчиком домена, но как по мне, овчинка выделки не стоит. Тот вариант, что я кинул в начале, самый просто и главное рабочий. А появляющееся окно в начале, не самое страшное, что могло случиться. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2018, 15:32 |
|
Консольное приложение: нужен совет
|
|||
---|---|---|---|
#18+
Roman Mejtes256kясно, но, что значит "изначально"? оно уже есть финформс, хотелось бы прикрутить и такую возможность. А что избавиться от постоянного появления консоли никак?Если оно уже WinForms, вам не составит большого труда переключить его на "Console Application" в свойствах проекта. Гуглите методы AllocConsole(void) и AttachConsole и другие методы работы с консолью. Проблема в том, что Console.WriteLine будет криво работать, если приатачиться к родительскому процессу :( будут проблемы с перенаправлением ввода вывода, а консоль не будет ожидать завершение процесса, а сразу вернет управление в консоль, при этом вывод в консоль будет продолжаться параллельно с выводом другой программы. с FreeConsole самый быстрый, простой и рабочий вариант мне надо, чтобы по флажку юзер мог запустить как гуёвое приложение или как консоль. Еще вопрос: как прилепить иконку и титул консоли, если использовать вариант типа тех, что выше приведены с использованием kernel32 AllocConsole(); и т.д. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2018, 12:23 |
|
Консольное приложение: нужен совет
|
|||
---|---|---|---|
#18+
256kЕще вопрос: как прилепить иконку и титул консоли, если использовать вариант типа тех, что выше приведены с использованием kernel32 AllocConsole(); Console.Title установить иконку - в свойствах проекта задать ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2018, 14:59 |
|
Консольное приложение: нужен совет
|
|||
---|---|---|---|
#18+
Изопропил256kЕще вопрос: как прилепить иконку и титул консоли, если использовать вариант типа тех, что выше приведены с использованием kernel32 AllocConsole(); Console.Title установить иконку - в свойствах проекта задать ясно, сбило с толку то, что, если пускаю из-под студии с vshost, то иконки нет ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2018, 15:06 |
|
Консольное приложение: нужен совет
|
|||
---|---|---|---|
#18+
Roman Mejteskealon(Ruslan), есть вариант проще, делайте 2 приложения на одной сборке или просто Console приложение, у которой в Reference стоит ваша неконсольная программа или наоборот и всех делов. Либо вариант с загрузчиком домена, но как по мне, овчинка выделки не стоит. Тот вариант, что я кинул в начале, самый просто и главное рабочий. А появляющееся окно в начале, не самое страшное, что могло случиться. Я бы просто завел conditional variable в проекте, отдельную платформу под консольную конфигурацию, и зависимости от её значения собирал бы проект либо в консольной конфигурации, либо в оконной - как-то так: в .csproj: Код: xml 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.
в Program.cs: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
Потом в конфигурации проекта просто нужно будет выбрать нужную платформу перед компиляцией. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2018, 17:47 |
|
|
start [/forum/topic.php?fid=20&fpage=25&tid=1399136]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
46ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
69ms |
get tp. blocked users: |
1ms |
others: | 291ms |
total: | 450ms |
0 / 0 |