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


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