|
Может ли быть Консольным или WinForm в зависимости от параметра?
|
|||
---|---|---|---|
#18+
Пока программно тему не копал. Есть идея утилитки. Смысл, чтоб она могла запускаться и в режиме консоли, и в режиме "НЕ консоли", в зависимости от параметра командной строки. Консоль нужна например если 1) делать туда вывод событий 2) если запуск в режиме bat-файла, то он будет ждать завершения и только потом переходить к след. команде Консоль НЕ нужна например если 1) вывод в нее не нужен 2) черное ее окно на экран не нужно и т.д. О GUI типа формы на экран речь не идет, форму можно вызвать из main() и для консольного приложения, речь не об этом. Грубо, хочу так (в свойствах проекта предположительно "Приложение Win Form + Sub Main") Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8.
МОЖНО или НЕ МОЖНО? 2 проекта не хочу, там очень много всего а логика одинаковая (что с консолью, что без), сложно будет потом "параллельно поддерживать". ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2019, 23:43 |
|
Может ли быть Консольным или WinForm в зависимости от параметра?
|
|||
---|---|---|---|
#18+
Дмитрий77, Create page allocconsole (kernel32) ? может сработает ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2019, 00:33 |
|
Может ли быть Консольным или WinForm в зависимости от параметра?
|
|||
---|---|---|---|
#18+
Краткий ответ - нет (если не использовать нативный Win API, про который выше упоминали). А зачем это надо? Нельзя ли просто отделить функционал от UI и сделать к нему две разные морды - одну консольную, а другую GUI? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2019, 05:03 |
|
Может ли быть Консольным или WinForm в зависимости от параметра?
|
|||
---|---|---|---|
#18+
buserДмитрий77, Create page allocconsole (kernel32) ? может сработаетон же сказал что о ГУИ и формах речи не идет. Я сам теряюсь что ему нужно) ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2019, 07:07 |
|
Может ли быть Консольным или WinForm в зависимости от параметра?
|
|||
---|---|---|---|
#18+
Дмитрий77Консоль НЕ нужна например если 1) вывод в нее не нужен 2) черное ее окно на экран не нужно и т.д. Ты опиши что нужно мил человек. А то выражение: "мне нужен НЕ ХЛЕБ" очень широко трактуется) ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2019, 07:09 |
|
Может ли быть Консольным или WinForm в зависимости от параметра?
|
|||
---|---|---|---|
#18+
Дмитрий772 проекта не хочу, там очень много всего а логика одинаковая (что с консолью, что без), сложно будет потом "параллельно поддерживать".вот и не мудри. Не может быть два проекта одинаковых чтобы их запускать по ключику консоль/не консоль. Забудь. Тут даже постановка не катит. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2019, 07:11 |
|
Может ли быть Консольным или WinForm в зависимости от параметра?
|
|||
---|---|---|---|
#18+
fkthatКраткий ответ - нет (если не использовать нативный Win API, про который выше упоминали). м-м-м счас глянул свои старые VB6 коды, именно так и было сделано одно из приложений Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9.
А когда переписывал на .Net от API отказался в пользу "Консольное приложение". И вилку эту убил. Видимо придется реанимировать. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2019, 07:13 |
|
Может ли быть Консольным или WinForm в зависимости от параметра?
|
|||
---|---|---|---|
#18+
Дмитрий77, Именно бейсик и именно старые подходы. Денег за это счас не платят. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2019, 07:17 |
|
Может ли быть Консольным или WinForm в зависимости от параметра?
|
|||
---|---|---|---|
#18+
Дмитрий77, Тут проблема в том, что у тебя, очень похоже, изначально через джоппу сделано. А именно логика перемешана с UI. Если бы это было разделено, хотя бы логически в пределах одного приложения, то логику легко было бы вынести в отдельную сборку и использовать в двух разных аппликухах с разными UI (GUI и CLI). Ты, вот, через неделю еще и веб-интерфейс захочешь - и что, еще и веб-сервер станешь встраивать в свое приложение вместе с GUI и консолью? Начни лучше с рефакторинга того, что есть. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2019, 08:42 |
|
Может ли быть Консольным или WinForm в зависимости от параметра?
|
|||
---|---|---|---|
#18+
Дмитрий77, Не может. Флаг отвечающий за это находится в PE заголовке AllocConsole применить можно, но могут быть проблемы с перенаправлением ввода-вывода Чистый вариант - приложение делать консольным, если требуют флаги - создавать новый процесс и завершать текущий (естественно два exe потребуется, но это не страшно, основной код в dll должен располагаться Второму exe можно изменить расширениие, .bin например.) Недостатки - консольное окно на короткое время будет показываться и id процесса изменится PS. бейсик и подходы ни причём ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2019, 08:52 |
|
Может ли быть Консольным или WinForm в зависимости от параметра?
|
|||
---|---|---|---|
#18+
Изопропилбейсик и подходы ни причёмда. Переборщил с целью, чтобы автор отказался от этой идеи. Она тут вроде уже второй раз за пару лет проскакивает. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2019, 08:57 |
|
Может ли быть Консольным или WinForm в зависимости от параметра?
|
|||
---|---|---|---|
#18+
fkthat А именно логика перемешана с UI. Пост автора не о этом... А о том что он хочет возможность делать невидимую консоль Автору: Есть немало советов и примеров на тему того, как скрыватть консольное окно через winApi ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2019, 09:04 |
|
Может ли быть Консольным или WinForm в зависимости от параметра?
|
|||
---|---|---|---|
#18+
dvimневидимую консольвот расскажи. Я правда не видел. Что то схожее с винсервисом? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2019, 09:37 |
|
Может ли быть Консольным или WinForm в зависимости от параметра?
|
|||
---|---|---|---|
#18+
Petro123, Скорее он хочет, чтобы программа отрабатывала, ничего не показывая на экране. Все таки винсервис - он не совсем для этого. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2019, 09:59 |
|
Может ли быть Консольным или WinForm в зависимости от параметра?
|
|||
---|---|---|---|
#18+
dvim, Экран в консоли не программы а винды. Пусть не выводит туда ничего. Что за блажь такая? Некоторые ведь запрещают копировать текст мышкой в браузере. Вы считаете это правильно? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2019, 10:05 |
|
Может ли быть Консольным или WinForm в зависимости от параметра?
|
|||
---|---|---|---|
#18+
dvimА о том что он хочет возможность делать невидимую консоль ОМГ. Зачем может быть нужна невидимая консоль??? Давайте тогда уж сразу сделаем невидимое приложение Если для логирования, то разумнее просто сделать логирование в файл или куда-нибудь еще. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2019, 10:10 |
|
Может ли быть Консольным или WinForm в зависимости от параметра?
|
|||
---|---|---|---|
#18+
Petro123dvimневидимую консольвот расскажи. Я правда не видел. Что то схожее с винсервисом?не Если консольное приложение создает окно, окно консоли продолжает отображаться что не очень красиво, Да и юзер может случайно завершить приложение закрыв консольное окно PS При сокрытии консольного окна нужно убедиться, что у него нет родителя ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2019, 10:26 |
|
Может ли быть Консольным или WinForm в зависимости от параметра?
|
|||
---|---|---|---|
#18+
ИзопропилЕсли консольное приложение создает окно,а зачем? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2019, 10:28 |
|
Может ли быть Консольным или WinForm в зависимости от параметра?
|
|||
---|---|---|---|
#18+
Изопропил, Я понимаю так, что консольное выводит в выходной поток. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2019, 10:29 |
|
Может ли быть Консольным или WinForm в зависимости от параметра?
|
|||
---|---|---|---|
#18+
fkthatЗачем может быть нужна невидимая консоль??? Чтоб GUI рисовать отдельно ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2019, 10:30 |
|
Может ли быть Консольным или WinForm в зависимости от параметра?
|
|||
---|---|---|---|
#18+
ИзопропилfkthatЗачем может быть нужна невидимая консоль??? Чтоб GUI рисовать отдельнопример то есть из гугла? Дайте. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2019, 10:31 |
|
Может ли быть Консольным или WinForm в зависимости от параметра?
|
|||
---|---|---|---|
#18+
Petro123ИзопропилЕсли консольное приложение создает окно,а зачем?топикстартер хочет написать универсальное приложение консоль/GUI ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2019, 10:33 |
|
Может ли быть Консольным или WinForm в зависимости от параметра?
|
|||
---|---|---|---|
#18+
Изопропилтопикстартер хочет написать универсальное приложение консоль/GUIпример которого отсутствует в гугл картинки. Поздравляю. Он запретил мышкой копировать текст на своем сайте. Удачи ему. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2019, 10:35 |
|
Может ли быть Консольным или WinForm в зависимости от параметра?
|
|||
---|---|---|---|
#18+
уже обсуждали эту тему и не 1 раз в этом разделе https://www.sql.ru/forum/1305732/konsolnoe-prilozhenie-nuzhen-sovet?hl=console winforms ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2019, 10:37 |
|
Может ли быть Консольным или WinForm в зависимости от параметра?
|
|||
---|---|---|---|
#18+
Roman Mejtes, Да. Точно. Было) Раз в год. Я кстати из винФормс подавляю окно консоли runSql.exe. Но это совсем другое дело. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2019, 10:40 |
|
Может ли быть Консольным или WinForm в зависимости от параметра?
|
|||
---|---|---|---|
#18+
Petro123Изопропил, Я понимаю так, что консольное выводит в выходной поток. Есть ещё Console API ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2019, 10:45 |
|
Может ли быть Консольным или WinForm в зависимости от параметра?
|
|||
---|---|---|---|
#18+
Изопропил, Ну через него наверно из гуи и скрывают окно с забором ответов к себе. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2019, 10:49 |
|
Может ли быть Консольным или WinForm в зависимости от параметра?
|
|||
---|---|---|---|
#18+
Petro123, Ты о псевдоконсоли? В любом случае в ветке winforms это оффтоп ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2019, 11:12 |
|
Может ли быть Консольным или WinForm в зависимости от параметра?
|
|||
---|---|---|---|
#18+
Дмитрий772 проекта не хочу, там очень много всего а логика одинаковая (что с консолью, что без), сложно будет потом "параллельно поддерживать". Так можно сделать, придется повозиться с разделением, если еще не сделано. Я не так давно делал аналогичную фигню, т.е. добавлял к уже работающему винформс приложению - возможность быть запущенным как консольное с командной строкой, в бат файле и т.д. Например, у меня торчали MessageBox на эксцепциях на каждом шагу, пришлось сделать в лог файл, если запущено в консольном режиме и тд. Тут даже тема была, кстати ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2019, 11:18 |
|
Может ли быть Консольным или WinForm в зависимости от параметра?
|
|||
---|---|---|---|
#18+
Ролг Хупин, Ну, по всему приложению считай нужно писать в каком режиме оно работает. ЧудоЮдоРыбаКит. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2019, 11:23 |
|
Может ли быть Консольным или WinForm в зависимости от параметра?
|
|||
---|---|---|---|
#18+
Изопропилтопикстартер хочет написать универсальное приложение консоль/GUI Я же и предлагаю туда еще встроить веб, мобайл на ксамарине, и UWP-версию. Будет не просто универсальное, а сверхуниверсальное приложение. И главное, еще не забыть "как мне все это засунуть в один екзешник" (с) Говорю же нах автору - раздели сначала логику и UI. Пока у тебя вся логика в баттон-кликах и месседж-боксы напрямую вызывает, то ничего хорошего из такого говнокода все разно не выйдет. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2019, 11:30 |
|
Может ли быть Консольным или WinForm в зависимости от параметра?
|
|||
---|---|---|---|
#18+
Ролг ХупинНапример, у меня торчали MessageBox на эксцепциях на каждом шагу, пришлось сделать в лог файл, если запущено в консольном режиме Ужоснах В файл вывод, а не в логгер? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2019, 11:44 |
|
Может ли быть Консольным или WinForm в зависимости от параметра?
|
|||
---|---|---|---|
#18+
ИзопропилУжоснах Ну так правильно. У нас же "DI это просто очередная модная тема" (с) Никакие гайдлайны и бестпрактис нихрена не авторитеты - пока самостоятельно граблями по башке не получат, так ничему не научатся. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2019, 12:18 |
|
Может ли быть Консольным или WinForm в зависимости от параметра?
|
|||
---|---|---|---|
#18+
ИзопропилРолг ХупинНапример, у меня торчали MessageBox на эксцепциях на каждом шагу, пришлось сделать в лог файл, если запущено в консольном режиме Ужоснах В файл вывод, а не в логгер? В логгер, да, log4net ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2019, 16:00 |
|
Может ли быть Консольным или WinForm в зависимости от параметра?
|
|||
---|---|---|---|
#18+
ИзопропилНе может. Флаг отвечающий за это находится в PE заголовке Я понял ответ, спасибо. ИзопропилAllocConsole применить можно, но могут быть проблемы с перенаправлением ввода-вывода Не будет проблем. В VB6 так делал. Это нормальный вариант. Но в .Net будут некоторые непреодолимые издержки (в том числе и при "консольном" через AllocConsole запуске), вот вспомнил свой пост: Простое приложение без GUI выдает свою активность (песочные часики). Хотя в данном случае можно забить, в силу специфики кухни этих часиков там и так будет, хоть и из чисто консоли. Petro123Я сам теряюсь что ему нужно Все просто. Приложение SendFax.exe -размещает задание в MS службу факсов + [ опционально отслеживает как идет конкретно процесс отправки этого факса] Через FaxCOMEx ("часиков" на этапе создания задания по любому не избежишь) На входе куча параметров через cmd: номер, отправляемый документ, + всякие титульные страницы, Sender Info, много там всего. А "что ему нужно" зависит от хотелок юзера. Если нужно где-нибудь (в Excel-е, своей проге) щелкнуть кнопку и любоваться как идет/дошел этот самый единственный факс, то подойдет красивое GUI окошко где будет писаться Dialing-Sending page-Retrying и рисоваться свистелки, и консоль нафиг не нужна. А если например последовательная отправка по списку, то например bat-файл с переходом к след. строчке после выполнения предыдущей, и консоль самое то. Ну опционально можно отслеживать коротким выводом в консоль типа Dialing... Sending page 1 of 3 Sending page 2 of 3 … Основная сложная логика 1) Грамотная обработка входных параметров cmd - создание задания 2) Опциональная часть с отслеживанием статистики отправки этого задания Petro123Ну, по всему приложению считай нужно писать в каком режиме оно работает. И че, один параметр bConsoleMode=true/false вычисляемый сразу же. == В общем слегка конкретизировал, чего конкренто делаю. Пока логикой и GUI отслеживания событий занимаюсь, там посмотрим как сделаю с консоль/не консоль. Суть ответов по существу понял. Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2019, 16:28 |
|
Может ли быть Консольным или WinForm в зависимости от параметра?
|
|||
---|---|---|---|
#18+
ИМХО пиши лог в файл, и отдельным приложением визуализация лога хоть в консоль, хоть в контрол. Виндовс умеет оповещать об изменении файла. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2019, 20:13 |
|
Может ли быть Консольным или WinForm в зависимости от параметра?
|
|||
---|---|---|---|
#18+
Dima TИМХО пиши лог в файл, и отдельным приложением визуализация лога хоть в консоль, хоть в контрол. Виндовс умеет оповещать об изменении файла. Всё намного прозаичнее :)) Код: powershell 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2019, 20:30 |
|
Может ли быть Консольным или WinForm в зависимости от параметра?
|
|||
---|---|---|---|
#18+
Вот была полезная ветка https://www.sql.ru/forum/1305732/konsolnoe-prilozhenie-nuzhen-sovet?hl=console ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2019, 08:30 |
|
Может ли быть Консольным или WinForm в зависимости от параметра?
|
|||
---|---|---|---|
#18+
Дошли руки до реализации. Фигово получается. Тупо AllocConsole() как я делал в VB6 не катит. При запуске из bat-файла или cmd оно плодит новую консоль. Катит (как сперва показалось ) вот такой вариант что даже стандартные Console.xxx работают (WinForm+Main()): Код: vbnet 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.
При тупо запуске мышкой все OK (AllocConsole). При вызове из bat-файла тоже все корректно (AttachConsole). НО При вызове из cmd - фигня какая-то, AttachConsole вроде срабатывает, вывод идет, но Console.ReadKey не ловится, вместо этого как бы выразиться, cmd сразу "подставляется под ввод новой команды", сам мой exe-шник закушен (пока консоль не закроешь), короче бред-мрак, не годится. Подкоректировать как то можно? Обратный вариант с "Консольное приложение" + сразу FreeConsole (если "без консоли") - ну не охота с "Мигалкой консоли". Компилировать 2 раза (2 разные имени) - можно, но как то некрасиво (ну понятно, что вообще один код можно сделать и только тип проекта менять перед компиляцией) В VB6 достаточно было либо просто AllocConsole (и оно корректно присасывалось к родительской консоли при наличии без всякого Attach), либо отсутствие AllocConsole (и оно запускалось как "неконсольное"). Че придумать то? ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2019, 04:11 |
|
Может ли быть Консольным или WinForm в зависимости от параметра?
|
|||
---|---|---|---|
#18+
Дмитрий77Компилировать 2 раза (2 разные имени) - можно, но как то некрасиво (ну понятно, что вообще один код можно сделать и только тип проекта менять перед компиляцией) ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2019, 07:28 |
|
Может ли быть Консольным или WinForm в зависимости от параметра?
|
|||
---|---|---|---|
#18+
Дмитрий77Компилировать 2 раза (2 разные имени) - можно, но как то некрасиво (ну понятно, что вообще один код можно сделать и только тип проекта менять перед компиляцией)msbuild используй ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2019, 07:30 |
|
Может ли быть Консольным или WinForm в зависимости от параметра?
|
|||
---|---|---|---|
#18+
ИзопропилДмитрий77Компилировать 2 раза (2 разные имени) - можно, но как то некрасиво (ну понятно, что вообще один код можно сделать и только тип проекта менять перед компиляцией)msbuild используй некрасив сам факт, что exe-шника будет 2, а делать один из другого и ручками недолго (поменять тип проекта + м.б. один параметр в коде ConsoleMode=True/False) ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2019, 07:52 |
|
Может ли быть Консольным или WinForm в зависимости от параметра?
|
|||
---|---|---|---|
#18+
Дмитрий77, Ручками то зачем? ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2019, 07:57 |
|
Может ли быть Консольным или WinForm в зависимости от параметра?
|
|||
---|---|---|---|
#18+
Дмитрий77Пока программно тему не копал. Есть идея утилитки. Смысл, чтоб она могла запускаться и в режиме консоли, и в режиме "НЕ консоли", в зависимости от параметра командной строки. . Сделать 2 exe файла. Первый в зависимости от параметров патчит ему PE Header и запускает. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2019, 08:52 |
|
Может ли быть Консольным или WinForm в зависимости от параметра?
|
|||
---|---|---|---|
#18+
Eoltпатчит ему PE Header Где такую траву берут? ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2019, 09:13 |
|
Может ли быть Консольным или WinForm в зависимости от параметра?
|
|||
---|---|---|---|
#18+
Изопропил, а в чем проблема? ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2019, 09:13 |
|
Может ли быть Консольным или WinForm в зависимости от параметра?
|
|||
---|---|---|---|
#18+
EoltСделать 2 exe файла. Первый в зависимости от параметров патчит ему PE Header и запускает. В гугле полно уже готовых программ для патчинга PE-хидера. А так - можно еще круче: компилировать проект в модули (-target:module), а потом батником в зависимости от через csc эти модули собирать либо в консольную аппликуху, либо в оконную. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2019, 09:32 |
|
Может ли быть Консольным или WinForm в зависимости от параметра?
|
|||
---|---|---|---|
#18+
ИМХО патчить EXE на лету плохая идея, антивирусам точно не понравится, в один прекрасный день они могут просто удалить пропатченный EXE и/или того кто патчит. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2019, 09:42 |
|
Может ли быть Консольным или WinForm в зависимости от параметра?
|
|||
---|---|---|---|
#18+
Dima TИМХО патчить EXE на лету плохая идея, антивирусам точно не понравится, в один прекрасный день они могут просто удалить пропатченный EXE и/или того кто патчит. С чего это им не понравится правка одного байта в заголовке отвечающего за тип приложения? Если же твой антивирус на такое ругается - то место ему в мусорке (как впрочем и большинству этого байтового хлама). ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2019, 09:59 |
|
Может ли быть Консольным или WinForm в зависимости от параметра?
|
|||
---|---|---|---|
#18+
[quot Eolt]Dima TЕсли же твой антивирус на такое ругается - то место ему в мусорке (как впрочем и большинству этого байтового хлама). Согласен, но попробуй это объяснить админу клиента. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2019, 10:06 |
|
Может ли быть Консольным или WinForm в зависимости от параметра?
|
|||
---|---|---|---|
#18+
EoltИзопропил, а в чем проблема? 1) с readonly носителем, записью в Program Flles 2) запуском нескольких экзкемпляров приложения PS существование java.exe и javaw.exe не смущает? ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2019, 10:52 |
|
Может ли быть Консольным или WinForm в зависимости от параметра?
|
|||
---|---|---|---|
#18+
подписывайте свои продукты ЭЦП, и антивирусы не будут ругаться ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2019, 11:33 |
|
Может ли быть Консольным или WinForm в зависимости от параметра?
|
|||
---|---|---|---|
#18+
Roman Mejtesподписывайте свои продукты ЭЦП, и антивирусы не будут ругаться Да, только после патчинга хидера ЭЦП превращается в тыкву. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2019, 11:36 |
|
Может ли быть Консольным или WinForm в зависимости от параметра?
|
|||
---|---|---|---|
#18+
Сон Веры ПавловныRoman Mejtesподписывайте свои продукты ЭЦП, и антивирусы не будут ругаться Да, только после патчинга хидера ЭЦП превращается в тыкву. Подпись тоже можно патчить ))) Тут главный минус в том что ЭЦП штука не дешевая. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2019, 12:15 |
|
Может ли быть Консольным или WinForm в зависимости от параметра?
|
|||
---|---|---|---|
#18+
ИзопропилEoltИзопропил, а в чем проблема? 1) с readonly носителем, записью в Program Flles Есть много решений: AppData, копирование второго экзешника в Temp и т.д. автор2) запуском нескольких экзкемпляров приложения PS существование java.exe и javaw.exe не смущает? Не вижу никаких проблем ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2019, 13:48 |
|
Может ли быть Консольным или WinForm в зависимости от параметра?
|
|||
---|---|---|---|
#18+
Видимо я пока остановлюсь на варианте WinForm + ключ /Console + AllocConsole/AttachConsole. Это даст возможность безболезненно дописать единую логику в зависимости от Не консоль/Консоль (пока что сделано как "не консоль"). Ну а дальше подумаю. Либо 2 exe, либо "Консольное приложение" + FreeConsole на старте. Патчить заголовок - однозначно дурной вариант. ЭЦП Code Signing имеется, в продакшн все подписывается, но причем тут это. От вирусовантивирусов кстати не всегда спасает. Но не об этом речь. Здесь еще такой важный момент. Кроме того что "Консольное" рисует черную консоль и чего-то туда пишет, оно еще берет управление на себя до своего завершения. То которое "GUI" возвращает управление сразу. Метод с AttachConsole не обеспечивает "корректной консоли" в случае cmd. Т.е. вроде как приаттачились и туда пишет, а управление уже передано в командную строку, даже "Press Any key..." не нажмешь. К слову, "нормальный вариант" ("Консольное приложение" + FreeConsole на старте) кроме "мелькания консоли", еще и этим требованиям не удовлетворяет. Управление не будет передано в cmd сразу после FreeConsole, консоль будет ждать полного завершения "всех GUI". Метод с AttachConsole обеспечит невозврат управления ("корректную консоль"), если его из cmd запускать start /w proga.exe Теоретически можно написать маленькую "прокладку" на VB6, где требуемый функционал случайно или нарочно поддерживается. Прокладка будет играть роль "start /w". Т.е. если у меня нет ключа /Console, VB6 просто запускает .Net-exe и выходит Если у меня ключ /Console, то VB6 делает AllocConsole (случайно или нарочно это в VB6 будет работать как грамотный AttachConsole без возврата управления в cmd), запускает .Net-exe которое делает AttachConsole к родительскому VB6 процессу. Но, при этом VB6-прокладка надо думать должна быть запущена до окончания работы .Net-exe (бесконечный цикл с DoEvents с проверкой завершился ли .Net-exe ? Псевдозагрузка процессора из-за цикла уже не есть good). Ну, естественно, такой вариант не может сильно нравится, хотя он и обеспечит видимость и функциональность требуемого. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2019, 16:07 |
|
Может ли быть Консольным или WinForm в зависимости от параметра?
|
|||
---|---|---|---|
#18+
Дмитрий77Теоретически можно написать маленькую "прокладку" на VB6, где требуемый функционал случайно или нарочно поддерживается. случайно или нарочно это в VB6 будет работать как грамотный AttachConsole без возврата управления в cmd Короче не получится, соврал, забыл, ничего там такого нет и не было и все то же самое. В VB6 у меня был грубо такой код: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8.
При написании/тестировании это было НЕ консольное приложение, но наличие AllocConsole позволяло тестировать его как консольное на этапе написания. А под конец делалось вот это: Код: vbnet 1.
Что превращало его в то что в .Net называется тип проекта="Консольное приложение" (в VB6 в проекте это задать нельзя). После патча AllocConsole/FreeConsole теряют смысл, хотя и не мешают. И да, был ключ /NoConsole, но он просто отменял вывод в консоль всякой всячины, но даже не закрывал саму консоль и тем более не менял тип приложения. Исходя из того что хочу сейчас, получается ДА, только 2 exe-шника 1) "WinForm"+Main = а)нету консоли б) GUI в) возврат управления сразу 2) "Консольное приложение"= а)консоль б) вывод в консоль в) возврат управления по завершению Код естественно единый. (2) делается из (1) тупо либо сменой типа проекта, либо тем же LINK.exe (что одно и то же). ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2019, 20:55 |
|
Может ли быть Консольным или WinForm в зависимости от параметра?
|
|||
---|---|---|---|
#18+
А чем решение со сменой Subsystem в хеадере не нравится? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2019, 21:09 |
|
Может ли быть Консольным или WinForm в зависимости от параметра?
|
|||
---|---|---|---|
#18+
Roman Mejtesсо сменой Subsystem в хеадере Link.exe если что именно это и делает. Но не на ходу же, вы ж обсуждали выше: подписи (а у меня подписано), антивирусы, очень дурной тон etc.... при этом все равно нужна "прокладка", которая будет решать патчить/не патчить. При этом неконсольная прокладка не приаттачит грамотно к родительской консоли, а консольная будет мигать при запуске вне консоли. Хотя вопрос возврата/невозврата управления через консольную прокладку таки решить можно. FreeConsole не говоря о "мигалке консоли", не решает проблемы возврата управления. AttachConsole, наоборот, не решает проблемы НЕвозврата управления. НЕТ универсального решения. Я б такой вопрос тут задал. Как из кода узнать оно "Консольное" или нет (согласно PE заголовку)? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2019, 22:37 |
|
Может ли быть Консольным или WinForm в зависимости от параметра?
|
|||
---|---|---|---|
#18+
Дмитрий77, тип задаётся при компиляции/сборке. для проктологов - GetModeuleHandle(0) возвращает адрес загруженного образа в памяти, остаётся прочитать поле Subsystem из COFF заголовка ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2019, 09:58 |
|
Может ли быть Консольным или WinForm в зависимости от параметра?
|
|||
---|---|---|---|
#18+
Дмитрий77Я б такой вопрос тут задал. Как из кода узнать оно "Консольное" или нет (согласно PE заголовку)? Спрашивали уже. 20441353 и следующий пост. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2019, 10:56 |
|
Может ли быть Консольным или WinForm в зависимости от параметра?
|
|||
---|---|---|---|
#18+
Сон Веры ПавловныДмитрий77Я б такой вопрос тут задал. Как из кода узнать оно "Консольное" или нет (согласно PE заголовку)? Спрашивали уже. 20441353 и следующий пост. Не слабые простыни, хотя и в моем стиле. Будет настрой, м.б. поковыряю. Но в моем случае при трансформации WinForm->Console App видимо проще поменять одну константу в коде bConsole=FalseTrue, чем ее так "вычислять", потратив денек-другой на освоение этой кухни (без освоения не получится, сколько раз еще в VB6 накалывался брав на веру чужие простыни, а они потом годами/через годы стреляли из за какого-нибудь ByRef вместо ByVal). И потом я еще до конца не решил, как я поступлю с консоль/не консоль, м.б. придет какая оригинальная идея реализации-гибридизации на ум. Пока что у меня сделан WinForm с ключиком /Console который делает Alloc(Attach)Console. Для тестирования и отладки в обоих режимах этого достаточно (на чем и сосредоточен), для грамотного продакшн не годится о чем говорилось выше. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2019, 06:12 |
|
|
start [/forum/topic.php?all=1&fid=20&tid=1398918]: |
0ms |
get settings: |
10ms |
get forum list: |
11ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
129ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
103ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 287ms |
0 / 0 |