powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Может ли быть Консольным или WinForm в зависимости от параметра?
25 сообщений из 62, страница 2 из 3
Может ли быть Консольным или 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
25 сообщений из 62, страница 2 из 3
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Может ли быть Консольным или WinForm в зависимости от параметра?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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