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

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

а в чем проблема?

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

PS существование java.exe и javaw.exe не смущает?
31 май 19, 10:52    [21898341]     Ответить | Цитировать Сообщить модератору
 Re: Может ли быть Консольным или WinForm в зависимости от параметра?  [new]
Roman Mejtes
Member

Откуда: г. Пермь
Сообщений: 3351
подписывайте свои продукты ЭЦП, и антивирусы не будут ругаться
31 май 19, 11:33    [21898422]     Ответить | Цитировать Сообщить модератору
 Re: Может ли быть Консольным или WinForm в зависимости от параметра?  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 4820
Roman Mejtes
подписывайте свои продукты ЭЦП, и антивирусы не будут ругаться

Да, только после патчинга хидера ЭЦП превращается в тыкву.
31 май 19, 11:36    [21898429]     Ответить | Цитировать Сообщить модератору
 Re: Может ли быть Консольным или WinForm в зависимости от параметра?  [new]
Dima T
Member

Откуда:
Сообщений: 13673
Сон Веры Павловны
Roman Mejtes
подписывайте свои продукты ЭЦП, и антивирусы не будут ругаться

Да, только после патчинга хидера ЭЦП превращается в тыкву.

Подпись тоже можно патчить )))

Тут главный минус в том что ЭЦП штука не дешевая.
31 май 19, 12:15    [21898515]     Ответить | Цитировать Сообщить модератору
 Re: Может ли быть Консольным или WinForm в зависимости от параметра?  [new]
Eolt
Member

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

а в чем проблема?

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


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


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

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


Не вижу никаких проблем
31 май 19, 13:48    [21898739]     Ответить | Цитировать Сообщить модератору
 Re: Может ли быть Консольным или WinForm в зависимости от параметра?  [new]
Дмитрий77
Member

Откуда:
Сообщений: 4343
Видимо я пока остановлюсь на варианте 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 май 19, 16:07    [21898929]     Ответить | Цитировать Сообщить модератору
 Re: Может ли быть Консольным или WinForm в зависимости от параметра?  [new]
Дмитрий77
Member

Откуда:
Сообщений: 4343
Дмитрий77
Теоретически можно написать маленькую "прокладку" на VB6, где требуемый функционал случайно или нарочно поддерживается.
случайно или нарочно это в VB6 будет работать как грамотный AttachConsole без возврата управления в cmd

Короче не получится, соврал, забыл, ничего там такого нет и не было и все то же самое.

В VB6 у меня был грубо такой код:
 If the_ConsoleMode Then
    'создаём консоль
    AllocConsole
...
    FreeConsole
  Else
...
  End If

При написании/тестировании это было НЕ консольное приложение, но наличие AllocConsole позволяло тестировать его как консольное на этапе написания.
А под конец делалось вот это:
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 (что одно и то же).
2 июн 19, 20:55    [21899928]     Ответить | Цитировать Сообщить модератору
 Re: Может ли быть Консольным или WinForm в зависимости от параметра?  [new]
Roman Mejtes
Member

Откуда: г. Пермь
Сообщений: 3351
А чем решение со сменой Subsystem в хеадере не нравится?
2 июн 19, 21:09    [21899934]     Ответить | Цитировать Сообщить модератору
 Re: Может ли быть Консольным или WinForm в зависимости от параметра?  [new]
Дмитрий77
Member

Откуда:
Сообщений: 4343
Roman Mejtes
со сменой Subsystem в хеадере

Link.exe если что именно это и делает.
Но не на ходу же, вы ж обсуждали выше: подписи (а у меня подписано), антивирусы, очень дурной тон etc.... при этом все равно нужна "прокладка", которая будет решать патчить/не патчить. При этом неконсольная прокладка не приаттачит грамотно к родительской консоли, а консольная будет мигать при запуске вне консоли. Хотя вопрос возврата/невозврата управления через консольную прокладку таки решить можно.

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

Я б такой вопрос тут задал.
Как из кода узнать оно "Консольное" или нет (согласно PE заголовку)?
2 июн 19, 22:37    [21899975]     Ответить | Цитировать Сообщить модератору
 Re: Может ли быть Консольным или WinForm в зависимости от параметра?  [new]
Изопропил
Member

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

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

для проктологов - GetModeuleHandle(0) возвращает адрес загруженного образа в памяти,
остаётся прочитать поле Subsystem из COFF заголовка
3 июн 19, 09:58    [21900150]     Ответить | Цитировать Сообщить модератору
 Re: Может ли быть Консольным или WinForm в зависимости от параметра?  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 4820
Дмитрий77
Я б такой вопрос тут задал.
Как из кода узнать оно "Консольное" или нет (согласно PE заголовку)?

Спрашивали уже.
20441353
и следующий пост.
3 июн 19, 10:56    [21900194]     Ответить | Цитировать Сообщить модератору
 Re: Может ли быть Консольным или WinForm в зависимости от параметра?  [new]
Дмитрий77
Member

Откуда:
Сообщений: 4343
Сон Веры Павловны
Дмитрий77
Я б такой вопрос тут задал.
Как из кода узнать оно "Консольное" или нет (согласно PE заголовку)?

Спрашивали уже.
20441353
и следующий пост.

Не слабые простыни, хотя и в моем стиле.
Будет настрой, м.б. поковыряю.
Но в моем случае при трансформации WinForm->Console App видимо проще поменять одну константу в коде bConsole=FalseTrue, чем ее так "вычислять", потратив денек-другой на освоение этой кухни (без освоения не получится, сколько раз еще в VB6 накалывался брав на веру чужие простыни, а они потом годами/через годы стреляли из за какого-нибудь ByRef вместо ByVal).

И потом я еще до конца не решил, как я поступлю с консоль/не консоль, м.б. придет какая оригинальная идея реализации-гибридизации на ум.
Пока что у меня сделан WinForm с ключиком /Console который делает Alloc(Attach)Console. Для тестирования и отладки в обоих режимах этого достаточно (на чем и сосредоточен), для грамотного продакшн не годится о чем говорилось выше.
4 июн 19, 06:12    [21901080]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 [3]      все
Все форумы / WinForms, .Net Framework Ответить