Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / WinForms, .Net Framework Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
 Re: Может ли быть Консольным или WinForm в зависимости от параметра?  [new]
Изопропил
Member

Откуда:
Сообщений: 31192
Petro123
Изопропил,
Я понимаю так, что консольное выводит в выходной поток.

Есть ещё Console API
15 май 19, 10:45    [21885054]     Ответить | Цитировать Сообщить модератору
 Re: Может ли быть Консольным или WinForm в зависимости от параметра?  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
Изопропил,
Ну через него наверно из гуи и скрывают окно с забором ответов к себе.
15 май 19, 10:49    [21885059]     Ответить | Цитировать Сообщить модератору
 Re: Может ли быть Консольным или WinForm в зависимости от параметра?  [new]
Изопропил
Member

Откуда:
Сообщений: 31192
Petro123,

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

В любом случае в ветке winforms это оффтоп
15 май 19, 11:12    [21885076]     Ответить | Цитировать Сообщить модератору
 Re: Может ли быть Консольным или WinForm в зависимости от параметра?  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 3019
Дмитрий77
2 проекта не хочу, там очень много всего а логика одинаковая (что с консолью, что без), сложно будет потом "параллельно поддерживать".


Так можно сделать, придется повозиться с разделением, если еще не сделано.
Я не так давно делал аналогичную фигню, т.е. добавлял к уже работающему винформс приложению - возможность быть запущенным как консольное с командной строкой, в бат файле и т.д.
Например, у меня торчали MessageBox на эксцепциях на каждом шагу, пришлось сделать в лог файл, если запущено в консольном режиме и тд.
Тут даже тема была, кстати
15 май 19, 11:18    [21885082]     Ответить | Цитировать Сообщить модератору
 Re: Может ли быть Консольным или WinForm в зависимости от параметра?  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
Ролг Хупин,
Ну, по всему приложению считай нужно писать в каком режиме оно работает.
ЧудоЮдоРыбаКит.
15 май 19, 11:23    [21885088]     Ответить | Цитировать Сообщить модератору
 Re: Может ли быть Консольным или WinForm в зависимости от параметра?  [new]
fkthat
Member

Откуда:
Сообщений: 1164
Изопропил
топикстартер хочет написать универсальное приложение консоль/GUI


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

Говорю же нах автору - раздели сначала логику и UI. Пока у тебя вся логика в баттон-кликах и месседж-боксы напрямую вызывает, то ничего хорошего из такого говнокода все разно не выйдет.
15 май 19, 11:30    [21885094]     Ответить | Цитировать Сообщить модератору
 Re: Может ли быть Консольным или WinForm в зависимости от параметра?  [new]
Изопропил
Member

Откуда:
Сообщений: 31192
Ролг Хупин
Например, у меня торчали MessageBox на эксцепциях на каждом шагу, пришлось сделать в лог файл, если запущено в консольном режиме

Ужоснах

В файл вывод, а не в логгер?
15 май 19, 11:44    [21885105]     Ответить | Цитировать Сообщить модератору
 Re: Может ли быть Консольным или WinForm в зависимости от параметра?  [new]
fkthat
Member

Откуда:
Сообщений: 1164
Изопропил
Ужоснах


Ну так правильно. У нас же "DI это просто очередная модная тема" (с) Никакие гайдлайны и бестпрактис нихрена не авторитеты - пока самостоятельно граблями по башке не получат, так ничему не научатся.
15 май 19, 12:18    [21885152]     Ответить | Цитировать Сообщить модератору
 Re: Может ли быть Консольным или WinForm в зависимости от параметра?  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 3019
Изопропил
Ролг Хупин
Например, у меня торчали MessageBox на эксцепциях на каждом шагу, пришлось сделать в лог файл, если запущено в консольном режиме

Ужоснах

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


В логгер, да, log4net
15 май 19, 16:00    [21885474]     Ответить | Цитировать Сообщить модератору
 Re: Может ли быть Консольным или WinForm в зависимости от параметра?  [new]
Дмитрий77
Member

Откуда:
Сообщений: 4407
Изопропил
Не может. Флаг отвечающий за это находится в 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 май 19, 16:28    [21885518]     Ответить | Цитировать Сообщить модератору
 Re: Может ли быть Консольным или WinForm в зависимости от параметра?  [new]
Dima T
Member

Откуда:
Сообщений: 13936
ИМХО пиши лог в файл, и отдельным приложением визуализация лога хоть в консоль, хоть в контрол. Виндовс умеет оповещать об изменении файла.
15 май 19, 20:13    [21885705]     Ответить | Цитировать Сообщить модератору
 Re: Может ли быть Консольным или WinForm в зависимости от параметра?  [new]
fkthat
Member

Откуда:
Сообщений: 1164
Dima T
ИМХО пиши лог в файл, и отдельным приложением визуализация лога хоть в консоль, хоть в контрол. Виндовс умеет оповещать об изменении файла.


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

PS C:\logs> Get-Content .\mylog.txt -Tail 12 -Wait
15 май 19, 20:30    [21885714]     Ответить | Цитировать Сообщить модератору
 Re: Может ли быть Консольным или WinForm в зависимости от параметра?  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 3019
Вот была полезная ветка
https://www.sql.ru/forum/1305732/konsolnoe-prilozhenie-nuzhen-sovet?hl=console
16 май 19, 08:30    [21885847]     Ответить | Цитировать Сообщить модератору
 Re: Может ли быть Консольным или WinForm в зависимости от параметра?  [new]
Дмитрий77
Member

Откуда:
Сообщений: 4407
Дошли руки до реализации.
Фигово получается.

Тупо AllocConsole() как я делал в VB6 не катит.
При запуске из bat-файла или cmd оно плодит новую консоль.

Катит (как сперва показалось) вот такой вариант что даже стандартные Console.xxx работают (WinForm+Main()):
  '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 (и оно запускалось как "неконсольное").

Че придумать то?
31 май 19, 04:11    [21898135]     Ответить | Цитировать Сообщить модератору
 Re: Может ли быть Консольным или WinForm в зависимости от параметра?  [new]
Изопропил
Member

Откуда:
Сообщений: 31192
Дмитрий77
Компилировать 2 раза (2 разные имени) - можно, но как то некрасиво
(ну понятно, что вообще один код можно сделать и только тип проекта менять перед компиляцией)
31 май 19, 07:28    [21898157]     Ответить | Цитировать Сообщить модератору
 Re: Может ли быть Консольным или WinForm в зависимости от параметра?  [new]
Изопропил
Member

Откуда:
Сообщений: 31192
Дмитрий77
Компилировать 2 раза (2 разные имени) - можно, но как то некрасиво
(ну понятно, что вообще один код можно сделать и только тип проекта менять перед компиляцией)
msbuild используй
31 май 19, 07:30    [21898158]     Ответить | Цитировать Сообщить модератору
 Re: Может ли быть Консольным или WinForm в зависимости от параметра?  [new]
Дмитрий77
Member

Откуда:
Сообщений: 4407
Изопропил
Дмитрий77
Компилировать 2 раза (2 разные имени) - можно, но как то некрасиво
(ну понятно, что вообще один код можно сделать и только тип проекта менять перед компиляцией)
msbuild используй

некрасив сам факт, что exe-шника будет 2,
а делать один из другого и ручками недолго (поменять тип проекта + м.б. один параметр в коде ConsoleMode=True/False)
31 май 19, 07:52    [21898168]     Ответить | Цитировать Сообщить модератору
 Re: Может ли быть Консольным или WinForm в зависимости от параметра?  [new]
Изопропил
Member

Откуда:
Сообщений: 31192
Дмитрий77,

Ручками то зачем?
31 май 19, 07:57    [21898174]     Ответить | Цитировать Сообщить модератору
 Re: Может ли быть Консольным или WinForm в зависимости от параметра?  [new]
Eolt
Member

Откуда:
Сообщений: 1480
Дмитрий77
Пока программно тему не копал.
Есть идея утилитки.
Смысл, чтоб она могла запускаться и в режиме консоли, и в режиме "НЕ консоли", в зависимости от параметра командной строки.
.


Сделать 2 exe файла. Первый в зависимости от параметров патчит ему PE Header и запускает.
31 май 19, 08:52    [21898208]     Ответить | Цитировать Сообщить модератору
 Re: Может ли быть Консольным или WinForm в зависимости от параметра?  [new]
Изопропил
Member

Откуда:
Сообщений: 31192
Eolt
патчит ему PE Header

Где такую траву берут?
31 май 19, 09:13    [21898226]     Ответить | Цитировать Сообщить модератору
 Re: Может ли быть Консольным или WinForm в зависимости от параметра?  [new]
Eolt
Member

Откуда:
Сообщений: 1480
Изопропил,

а в чем проблема?
31 май 19, 09:13    [21898227]     Ответить | Цитировать Сообщить модератору
 Re: Может ли быть Консольным или WinForm в зависимости от параметра?  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 5104
Eolt
Сделать 2 exe файла. Первый в зависимости от параметров патчит ему PE Header и запускает.

В гугле полно уже готовых программ для патчинга PE-хидера.
А так - можно еще круче: компилировать проект в модули (-target:module), а потом батником в зависимости от через csc эти модули собирать либо в консольную аппликуху, либо в оконную.
31 май 19, 09:32    [21898247]     Ответить | Цитировать Сообщить модератору
 Re: Может ли быть Консольным или WinForm в зависимости от параметра?  [new]
Dima T
Member

Откуда:
Сообщений: 13936
ИМХО патчить EXE на лету плохая идея, антивирусам точно не понравится, в один прекрасный день они могут просто удалить пропатченный EXE и/или того кто патчит.
31 май 19, 09:42    [21898264]     Ответить | Цитировать Сообщить модератору
 Re: Может ли быть Консольным или WinForm в зависимости от параметра?  [new]
Eolt
Member

Откуда:
Сообщений: 1480
Dima T
ИМХО патчить EXE на лету плохая идея, антивирусам точно не понравится, в один прекрасный день они могут просто удалить пропатченный EXE и/или того кто патчит.


С чего это им не понравится правка одного байта в заголовке отвечающего за тип приложения?
Если же твой антивирус на такое ругается - то место ему в мусорке (как впрочем и большинству этого байтового хлама).
31 май 19, 09:59    [21898275]     Ответить | Цитировать Сообщить модератору
 Re: Может ли быть Консольным или WinForm в зависимости от параметра?  [new]
Dima T
Member

Откуда:
Сообщений: 13936
[quot Eolt]
Dima T
Если же твой антивирус на такое ругается - то место ему в мусорке (как впрочем и большинству этого байтового хлама).

Согласен, но попробуй это объяснить админу клиента.
31 май 19, 10:06    [21898280]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
Все форумы / WinForms, .Net Framework Ответить