powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Может ли быть Консольным или WinForm в зависимости от параметра?
62 сообщений из 62, показаны все 3 страниц
Может ли быть Консольным или WinForm в зависимости от параметра?
    #39813263
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пока программно тему не копал.
Есть идея утилитки.
Смысл, чтоб она могла запускаться и в режиме консоли, и в режиме "НЕ консоли", в зависимости от параметра командной строки.

Консоль нужна например если
1) делать туда вывод событий
2) если запуск в режиме bat-файла, то он будет ждать завершения и только потом переходить к след. команде

Консоль НЕ нужна например если
1) вывод в нее не нужен
2) черное ее окно на экран не нужно
и т.д.

О GUI типа формы на экран речь не идет, форму можно вызвать из main() и для консольного приложения, речь не об этом.

Грубо, хочу так (в свойствах проекта предположительно "Приложение Win Form + Sub Main")
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
Sub main()
   If InStr(Command, "/Console") Then
      'Поведение эквивалентное типу "Консольное приложение" в свойствах проекта
      'запускаем консоль, делаем действия выводим в консоль... (!!! bat-файл будет ждать завершения)
    Else
      'НЕ запускаем консоль, делаем действия (!!! bat-файл ждать НЕ будет)
    End If
End Sub



МОЖНО или НЕ МОЖНО?

2 проекта не хочу, там очень много всего а логика одинаковая (что с консолью, что без), сложно будет потом "параллельно поддерживать".
...
Рейтинг: 0 / 0
Может ли быть Консольным или WinForm в зависимости от параметра?
    #39813272
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77, Create page allocconsole (kernel32) ? может сработает
...
Рейтинг: 0 / 0
Может ли быть Консольным или WinForm в зависимости от параметра?
    #39813283
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Краткий ответ - нет (если не использовать нативный Win API, про который выше упоминали). А зачем это надо? Нельзя ли просто отделить функционал от UI и сделать к нему две разные морды - одну консольную, а другую GUI?
...
Рейтинг: 0 / 0
Может ли быть Консольным или WinForm в зависимости от параметра?
    #39813294
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buserДмитрий77, Create page allocconsole (kernel32) ? может сработаетон же сказал что о ГУИ и формах речи не идет.
Я сам теряюсь что ему нужно)
...
Рейтинг: 0 / 0
Может ли быть Консольным или WinForm в зависимости от параметра?
    #39813295
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Консоль НЕ нужна например если
1) вывод в нее не нужен
2) черное ее окно на экран не нужно
и т.д.
Ты опиши что нужно мил человек.
А то выражение: "мне нужен НЕ ХЛЕБ" очень широко трактуется)
...
Рейтинг: 0 / 0
Может ли быть Консольным или WinForm в зависимости от параметра?
    #39813297
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий772 проекта не хочу, там очень много всего а логика одинаковая (что с консолью, что без), сложно будет потом "параллельно поддерживать".вот и не мудри.
Не может быть два проекта одинаковых чтобы их запускать по ключику консоль/не консоль.
Забудь. Тут даже постановка не катит.
...
Рейтинг: 0 / 0
Может ли быть Консольным или WinForm в зависимости от параметра?
    #39813298
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatКраткий ответ - нет (если не использовать нативный Win API, про который выше упоминали).
м-м-м
счас глянул свои старые VB6 коды, именно так и было сделано одно из приложений
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
  str_Command = Command
  the_ConsoleMode = IIf(HasOptionFromStr(str_Command, "NoConsole"), False, True)
  If the_ConsoleMode Then
    'создаём консоль
    AllocConsole
    'получаем дескрипторы ввода и вывода
    hOutput = GetStdHandle(STD_OUTPUT_HANDLE)
    hInput = GetStdHandle(STD_INPUT_HANDLE)
  End If


А когда переписывал на .Net от API отказался в пользу "Консольное приложение".
И вилку эту убил.
Видимо придется реанимировать.
...
Рейтинг: 0 / 0
Может ли быть Консольным или WinForm в зависимости от параметра?
    #39813299
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77,
Именно бейсик и именно старые подходы. Денег за это счас не платят.
...
Рейтинг: 0 / 0
Может ли быть Консольным или WinForm в зависимости от параметра?
    #39813320
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77,

Тут проблема в том, что у тебя, очень похоже, изначально через джоппу сделано. А именно логика перемешана с UI. Если бы это было разделено, хотя бы логически в пределах одного приложения, то логику легко было бы вынести в отдельную сборку и использовать в двух разных аппликухах с разными UI (GUI и CLI). Ты, вот, через неделю еще и веб-интерфейс захочешь - и что, еще и веб-сервер станешь встраивать в свое приложение вместе с GUI и консолью? Начни лучше с рефакторинга того, что есть.
...
Рейтинг: 0 / 0
Может ли быть Консольным или WinForm в зависимости от параметра?
    #39813321
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77,

Не может. Флаг отвечающий за это находится в PE заголовке

AllocConsole применить можно, но могут быть проблемы с перенаправлением ввода-вывода

Чистый вариант - приложение делать консольным, если требуют флаги - создавать новый процесс и завершать текущий (естественно два exe потребуется, но это не страшно, основной код в dll должен располагаться
Второму exe можно изменить расширениие, .bin например.)

Недостатки - консольное окно на короткое время будет показываться и id процесса изменится

PS. бейсик и подходы ни причём
...
Рейтинг: 0 / 0
Может ли быть Консольным или WinForm в зависимости от параметра?
    #39813326
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилбейсик и подходы ни причёмда. Переборщил с целью, чтобы автор отказался от этой идеи. Она тут вроде уже второй раз за пару лет проскакивает.
...
Рейтинг: 0 / 0
Может ли быть Консольным или WinForm в зависимости от параметра?
    #39813329
dvim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat А именно логика перемешана с UI.
Пост автора не о этом...
А о том что он хочет возможность делать невидимую консоль

Автору: Есть немало советов и примеров на тему того, как скрыватть консольное окно через winApi
...
Рейтинг: 0 / 0
Может ли быть Консольным или WinForm в зависимости от параметра?
    #39813348
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dvimневидимую консольвот расскажи. Я правда не видел. Что то схожее с винсервисом?
...
Рейтинг: 0 / 0
Может ли быть Консольным или WinForm в зависимости от параметра?
    #39813365
dvim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,
Скорее он хочет, чтобы программа отрабатывала, ничего не показывая на экране.
Все таки винсервис - он не совсем для этого.
...
Рейтинг: 0 / 0
Может ли быть Консольным или WinForm в зависимости от параметра?
    #39813367
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dvim,
Экран в консоли не программы а винды. Пусть не выводит туда ничего.
Что за блажь такая?
Некоторые ведь запрещают копировать текст мышкой в браузере.
Вы считаете это правильно?
...
Рейтинг: 0 / 0
Может ли быть Консольным или WinForm в зависимости от параметра?
    #39813370
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dvimА о том что он хочет возможность делать невидимую консоль


ОМГ. Зачем может быть нужна невидимая консоль??? Давайте тогда уж сразу сделаем невидимое приложение Если для логирования, то разумнее просто сделать логирование в файл или куда-нибудь еще.
...
Рейтинг: 0 / 0
Может ли быть Консольным или WinForm в зависимости от параметра?
    #39813380
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123dvimневидимую консольвот расскажи. Я правда не видел. Что то схожее с винсервисом?не

Если консольное приложение создает окно,
окно консоли продолжает отображаться что не очень красиво,
Да и юзер может случайно завершить приложение закрыв консольное окно

PS
При сокрытии консольного окна нужно убедиться, что у него нет родителя
...
Рейтинг: 0 / 0
Может ли быть Консольным или WinForm в зависимости от параметра?
    #39813383
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилЕсли консольное приложение создает окно,а зачем?
...
Рейтинг: 0 / 0
Может ли быть Консольным или WinForm в зависимости от параметра?
    #39813386
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил,
Я понимаю так, что консольное выводит в выходной поток.
...
Рейтинг: 0 / 0
Может ли быть Консольным или WinForm в зависимости от параметра?
    #39813390
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatЗачем может быть нужна невидимая консоль???
Чтоб GUI рисовать отдельно
...
Рейтинг: 0 / 0
Может ли быть Консольным или WinForm в зависимости от параметра?
    #39813392
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилfkthatЗачем может быть нужна невидимая консоль???
Чтоб GUI рисовать отдельнопример то есть из гугла? Дайте.
...
Рейтинг: 0 / 0
Может ли быть Консольным или WinForm в зависимости от параметра?
    #39813394
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123ИзопропилЕсли консольное приложение создает окно,а зачем?топикстартер хочет написать универсальное приложение консоль/GUI
...
Рейтинг: 0 / 0
Может ли быть Консольным или WinForm в зависимости от параметра?
    #39813395
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилтопикстартер хочет написать универсальное приложение консоль/GUIпример которого отсутствует в гугл картинки.
Поздравляю.
Он запретил мышкой копировать текст на своем сайте.
Удачи ему.
...
Рейтинг: 0 / 0
Может ли быть Консольным или WinForm в зависимости от параметра?
    #39813396
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
уже обсуждали эту тему и не 1 раз в этом разделе
https://www.sql.ru/forum/1305732/konsolnoe-prilozhenie-nuzhen-sovet?hl=console winforms
...
Рейтинг: 0 / 0
Может ли быть Консольным или WinForm в зависимости от параметра?
    #39813399
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtes,
Да. Точно. Было)
Раз в год.
Я кстати из винФормс подавляю окно консоли runSql.exe.
Но это совсем другое дело.
...
Рейтинг: 0 / 0
Может ли быть Консольным или WinForm в зависимости от параметра?
    #39813404
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Изопропил,
Я понимаю так, что консольное выводит в выходной поток.
Есть ещё Console API
...
Рейтинг: 0 / 0
Может ли быть Консольным или WinForm в зависимости от параметра?
    #39813409
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил,
Ну через него наверно из гуи и скрывают окно с забором ответов к себе.
...
Рейтинг: 0 / 0
Может ли быть Консольным или WinForm в зависимости от параметра?
    #39813418
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

Ты о псевдоконсоли?

В любом случае в ветке winforms это оффтоп
...
Рейтинг: 0 / 0
Может ли быть Консольным или WinForm в зависимости от параметра?
    #39813423
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий772 проекта не хочу, там очень много всего а логика одинаковая (что с консолью, что без), сложно будет потом "параллельно поддерживать".

Так можно сделать, придется повозиться с разделением, если еще не сделано.
Я не так давно делал аналогичную фигню, т.е. добавлял к уже работающему винформс приложению - возможность быть запущенным как консольное с командной строкой, в бат файле и т.д.
Например, у меня торчали MessageBox на эксцепциях на каждом шагу, пришлось сделать в лог файл, если запущено в консольном режиме и тд.
Тут даже тема была, кстати
...
Рейтинг: 0 / 0
Может ли быть Консольным или WinForm в зависимости от параметра?
    #39813427
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин,
Ну, по всему приложению считай нужно писать в каком режиме оно работает.
ЧудоЮдоРыбаКит.
...
Рейтинг: 0 / 0
Может ли быть Консольным или WinForm в зависимости от параметра?
    #39813431
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилтопикстартер хочет написать универсальное приложение консоль/GUI

Я же и предлагаю туда еще встроить веб, мобайл на ксамарине, и UWP-версию. Будет не просто универсальное, а сверхуниверсальное приложение. И главное, еще не забыть "как мне все это засунуть в один екзешник" (с)

Говорю же нах автору - раздели сначала логику и UI. Пока у тебя вся логика в баттон-кликах и месседж-боксы напрямую вызывает, то ничего хорошего из такого говнокода все разно не выйдет.
...
Рейтинг: 0 / 0
Может ли быть Консольным или WinForm в зависимости от параметра?
    #39813438
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг ХупинНапример, у меня торчали MessageBox на эксцепциях на каждом шагу, пришлось сделать в лог файл, если запущено в консольном режиме
Ужоснах

В файл вывод, а не в логгер?
...
Рейтинг: 0 / 0
Может ли быть Консольным или WinForm в зависимости от параметра?
    #39813463
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилУжоснах

Ну так правильно. У нас же "DI это просто очередная модная тема" (с) Никакие гайдлайны и бестпрактис нихрена не авторитеты - пока самостоятельно граблями по башке не получат, так ничему не научатся.
...
Рейтинг: 0 / 0
Может ли быть Консольным или WinForm в зависимости от параметра?
    #39813650
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилРолг ХупинНапример, у меня торчали MessageBox на эксцепциях на каждом шагу, пришлось сделать в лог файл, если запущено в консольном режиме
Ужоснах

В файл вывод, а не в логгер?

В логгер, да, log4net
...
Рейтинг: 0 / 0
Может ли быть Консольным или WinForm в зависимости от параметра?
    #39813668
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилНе может. Флаг отвечающий за это находится в 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 отслеживания событий занимаюсь, там посмотрим как сделаю с консоль/не консоль. Суть ответов по существу понял. Спасибо.
...
Рейтинг: 0 / 0
Может ли быть Консольным или WinForm в зависимости от параметра?
    #39813761
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИМХО пиши лог в файл, и отдельным приложением визуализация лога хоть в консоль, хоть в контрол. Виндовс умеет оповещать об изменении файла.
...
Рейтинг: 0 / 0
Может ли быть Консольным или WinForm в зависимости от параметра?
    #39813767
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TИМХО пиши лог в файл, и отдельным приложением визуализация лога хоть в консоль, хоть в контрол. Виндовс умеет оповещать об изменении файла.

Всё намного прозаичнее :))

Код: powershell
1.
PS C:\logs> Get-Content .\mylog.txt -Tail 12 -Wait
...
Рейтинг: 0 / 0
Может ли быть Консольным или WinForm в зависимости от параметра?
    #39813832
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Может ли быть Консольным или WinForm в зависимости от параметра?
    #39820522
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дошли руки до реализации.
Фигово получается.

Тупо 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.
  'Console Functions
  Private Declare Function AllocConsole Lib "kernel32" () As Boolean

  Private Const ATTACH_PARENT_PROCESS As Integer = -1

  Private Declare Function AttachConsole Lib "kernel32" (ByVal dwProcessId As Integer) As Boolean
  Private Declare Function FreeConsole Lib "kernel32" () As Boolean

  Sub Main()

    Dim bConsoleMode As Boolean = True

    If bConsoleMode Then

      If AttachConsole(ATTACH_PARENT_PROCESS) = False Then
        AllocConsole()
        Console.WriteLine("AllocConsole")
      Else
        Console.WriteLine("AttachConsole")
      End If

      Console.WriteLine("This is my test string.")
      Console.WriteLine("Это моя тестовая строка. Привет.")
      Console.WriteLine("Press any key to continue . . . ")

      'эту функцию вызываем для того,
      'чтобы консоль не закрылась сразу же
      Console.ReadKey(True)
      FreeConsole()
    Else
      Application.EnableVisualStyles() 'инициализация XP/Vista стиля
      MsgBox("OK")
    End If
  End Sub



При тупо запуске мышкой все OK (AllocConsole).
При вызове из bat-файла тоже все корректно (AttachConsole).

НО При вызове из cmd - фигня какая-то,
AttachConsole вроде срабатывает, вывод идет,
но Console.ReadKey не ловится, вместо этого как бы выразиться, cmd сразу "подставляется под ввод новой команды",
сам мой exe-шник закушен (пока консоль не закроешь),
короче бред-мрак, не годится.

Подкоректировать как то можно?

Обратный вариант с "Консольное приложение" + сразу FreeConsole (если "без консоли") - ну не охота с "Мигалкой консоли".

Компилировать 2 раза (2 разные имени) - можно, но как то некрасиво
(ну понятно, что вообще один код можно сделать и только тип проекта менять перед компиляцией)

В VB6 достаточно было либо просто AllocConsole (и оно корректно присасывалось к родительской консоли при наличии без всякого Attach), либо отсутствие AllocConsole (и оно запускалось как "неконсольное").

Че придумать то?
...
Рейтинг: 0 / 0
Может ли быть Консольным или WinForm в зависимости от параметра?
    #39820531
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Компилировать 2 раза (2 разные имени) - можно, но как то некрасиво
(ну понятно, что вообще один код можно сделать и только тип проекта менять перед компиляцией)
...
Рейтинг: 0 / 0
Может ли быть Консольным или WinForm в зависимости от параметра?
    #39820532
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Компилировать 2 раза (2 разные имени) - можно, но как то некрасиво
(ну понятно, что вообще один код можно сделать и только тип проекта менять перед компиляцией)msbuild используй
...
Рейтинг: 0 / 0
Может ли быть Консольным или WinForm в зависимости от параметра?
    #39820538
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилДмитрий77Компилировать 2 раза (2 разные имени) - можно, но как то некрасиво
(ну понятно, что вообще один код можно сделать и только тип проекта менять перед компиляцией)msbuild используй
некрасив сам факт, что exe-шника будет 2,
а делать один из другого и ручками недолго (поменять тип проекта + м.б. один параметр в коде ConsoleMode=True/False)
...
Рейтинг: 0 / 0
Может ли быть Консольным или WinForm в зависимости от параметра?
    #39820542
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77,

Ручками то зачем?
...
Рейтинг: 0 / 0
Может ли быть Консольным или WinForm в зависимости от параметра?
    #39820554
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Пока программно тему не копал.
Есть идея утилитки.
Смысл, чтоб она могла запускаться и в режиме консоли, и в режиме "НЕ консоли", в зависимости от параметра командной строки.
.

Сделать 2 exe файла. Первый в зависимости от параметров патчит ему PE Header и запускает.
...
Рейтинг: 0 / 0
Может ли быть Консольным или WinForm в зависимости от параметра?
    #39820565
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eoltпатчит ему PE Header
Где такую траву берут?
...
Рейтинг: 0 / 0
Может ли быть Консольным или WinForm в зависимости от параметра?
    #39820566
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил,

а в чем проблема?
...
Рейтинг: 0 / 0
Может ли быть Консольным или WinForm в зависимости от параметра?
    #39820575
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EoltСделать 2 exe файла. Первый в зависимости от параметров патчит ему PE Header и запускает.
В гугле полно уже готовых программ для патчинга PE-хидера.
А так - можно еще круче: компилировать проект в модули (-target:module), а потом батником в зависимости от через csc эти модули собирать либо в консольную аппликуху, либо в оконную.
...
Рейтинг: 0 / 0
Может ли быть Консольным или WinForm в зависимости от параметра?
    #39820584
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИМХО патчить EXE на лету плохая идея, антивирусам точно не понравится, в один прекрасный день они могут просто удалить пропатченный EXE и/или того кто патчит.
...
Рейтинг: 0 / 0
Может ли быть Консольным или WinForm в зависимости от параметра?
    #39820589
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TИМХО патчить EXE на лету плохая идея, антивирусам точно не понравится, в один прекрасный день они могут просто удалить пропатченный EXE и/или того кто патчит.

С чего это им не понравится правка одного байта в заголовке отвечающего за тип приложения?
Если же твой антивирус на такое ругается - то место ему в мусорке (как впрочем и большинству этого байтового хлама).
...
Рейтинг: 0 / 0
Может ли быть Консольным или WinForm в зависимости от параметра?
    #39820592
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot Eolt]Dima TЕсли же твой антивирус на такое ругается - то место ему в мусорке (как впрочем и большинству этого байтового хлама).
Согласен, но попробуй это объяснить админу клиента.
...
Рейтинг: 0 / 0
Может ли быть Консольным или WinForm в зависимости от параметра?
    #39820624
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EoltИзопропил,

а в чем проблема?
1) с readonly носителем, записью в Program Flles
2) запуском нескольких экзкемпляров приложения

PS существование java.exe и javaw.exe не смущает?
...
Рейтинг: 0 / 0
Может ли быть Консольным или WinForm в зависимости от параметра?
    #39820647
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
подписывайте свои продукты ЭЦП, и антивирусы не будут ругаться
...
Рейтинг: 0 / 0
Может ли быть Консольным или WinForm в зависимости от параметра?
    #39820650
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtesподписывайте свои продукты ЭЦП, и антивирусы не будут ругаться
Да, только после патчинга хидера ЭЦП превращается в тыкву.
...
Рейтинг: 0 / 0
Может ли быть Консольным или WinForm в зависимости от параметра?
    #39820677
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры ПавловныRoman Mejtesподписывайте свои продукты ЭЦП, и антивирусы не будут ругаться
Да, только после патчинга хидера ЭЦП превращается в тыкву.
Подпись тоже можно патчить )))

Тут главный минус в том что ЭЦП штука не дешевая.
...
Рейтинг: 0 / 0
Может ли быть Консольным или WinForm в зависимости от параметра?
    #39820759
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилEoltИзопропил,

а в чем проблема?
1) с readonly носителем, записью в Program Flles

Есть много решений: AppData, копирование второго экзешника в Temp и т.д.


автор2) запуском нескольких экзкемпляров приложения

PS существование java.exe и javaw.exe не смущает?

Не вижу никаких проблем
...
Рейтинг: 0 / 0
Может ли быть Консольным или WinForm в зависимости от параметра?
    #39820858
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Видимо я пока остановлюсь на варианте 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).
Ну, естественно, такой вариант не может сильно нравится, хотя он и обеспечит видимость и функциональность требуемого.
...
Рейтинг: 0 / 0
Может ли быть Консольным или WinForm в зависимости от параметра?
    #39821383
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Теоретически можно написать маленькую "прокладку" на VB6, где требуемый функционал случайно или нарочно поддерживается.
случайно или нарочно это в VB6 будет работать как грамотный AttachConsole без возврата управления в cmd
Короче не получится, соврал, забыл, ничего там такого нет и не было и все то же самое.

В VB6 у меня был грубо такой код:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
 If the_ConsoleMode Then
    'создаём консоль
    AllocConsole
...
    FreeConsole
  Else
...
  End If


При написании/тестировании это было НЕ консольное приложение, но наличие AllocConsole позволяло тестировать его как консольное на этапе написания.
А под конец делалось вот это:
Код: vbnet
1.
LINK.exe /EDIT /SUBSYSTEM:CONSOLE {your exe's filename}


Что превращало его в то что в .Net называется тип проекта="Консольное приложение" (в VB6 в проекте это задать нельзя).
После патча AllocConsole/FreeConsole теряют смысл, хотя и не мешают.
И да, был ключ /NoConsole, но он просто отменял вывод в консоль всякой всячины, но даже не закрывал саму консоль и тем более не менял тип приложения.

Исходя из того что хочу сейчас, получается ДА, только 2 exe-шника
1) "WinForm"+Main = а)нету консоли б) GUI в) возврат управления сразу
2) "Консольное приложение"= а)консоль б) вывод в консоль в) возврат управления по завершению

Код естественно единый.
(2) делается из (1) тупо либо сменой типа проекта, либо тем же LINK.exe (что одно и то же).
...
Рейтинг: 0 / 0
Может ли быть Консольным или WinForm в зависимости от параметра?
    #39821384
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А чем решение со сменой Subsystem в хеадере не нравится?
...
Рейтинг: 0 / 0
Может ли быть Консольным или WinForm в зависимости от параметра?
    #39821401
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtesсо сменой Subsystem в хеадере
Link.exe если что именно это и делает.
Но не на ходу же, вы ж обсуждали выше: подписи (а у меня подписано), антивирусы, очень дурной тон etc.... при этом все равно нужна "прокладка", которая будет решать патчить/не патчить. При этом неконсольная прокладка не приаттачит грамотно к родительской консоли, а консольная будет мигать при запуске вне консоли. Хотя вопрос возврата/невозврата управления через консольную прокладку таки решить можно.

FreeConsole не говоря о "мигалке консоли", не решает проблемы возврата управления.
AttachConsole, наоборот, не решает проблемы НЕвозврата управления.
НЕТ универсального решения.

Я б такой вопрос тут задал.
Как из кода узнать оно "Консольное" или нет (согласно PE заголовку)?
...
Рейтинг: 0 / 0
Может ли быть Консольным или WinForm в зависимости от параметра?
    #39821500
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77,

тип задаётся при компиляции/сборке.

для проктологов - GetModeuleHandle(0) возвращает адрес загруженного образа в памяти,
остаётся прочитать поле Subsystem из COFF заголовка
...
Рейтинг: 0 / 0
Может ли быть Консольным или WinForm в зависимости от параметра?
    #39821534
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Я б такой вопрос тут задал.
Как из кода узнать оно "Консольное" или нет (согласно PE заголовку)?
Спрашивали уже.
20441353
и следующий пост.
...
Рейтинг: 0 / 0
Может ли быть Консольным или WinForm в зависимости от параметра?
    #39822032
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры ПавловныДмитрий77Я б такой вопрос тут задал.
Как из кода узнать оно "Консольное" или нет (согласно PE заголовку)?
Спрашивали уже.
20441353
и следующий пост.
Не слабые простыни, хотя и в моем стиле.
Будет настрой, м.б. поковыряю.
Но в моем случае при трансформации WinForm->Console App видимо проще поменять одну константу в коде bConsole=FalseTrue, чем ее так "вычислять", потратив денек-другой на освоение этой кухни (без освоения не получится, сколько раз еще в VB6 накалывался брав на веру чужие простыни, а они потом годами/через годы стреляли из за какого-нибудь ByRef вместо ByVal).

И потом я еще до конца не решил, как я поступлю с консоль/не консоль, м.б. придет какая оригинальная идея реализации-гибридизации на ум.
Пока что у меня сделан WinForm с ключиком /Console который делает Alloc(Attach)Console. Для тестирования и отладки в обоих режимах этого достаточно (на чем и сосредоточен), для грамотного продакшн не годится о чем говорилось выше.
...
Рейтинг: 0 / 0
62 сообщений из 62, показаны все 3 страниц
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Может ли быть Консольным или WinForm в зависимости от параметра?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]