msys2 нет черного окна

Мой скриншот

Как мне создать лаунчер для программы (или скрипта) на MSYS2, который не показывает мне черное окно терминала?

Моя ссылка:

msys2_shell.cmd -mingw64 -c  /c/myfolder/program.exe

person Fabio Di Matteo    schedule 01.03.2018    source источник
comment
gcc.gnu.org/ml/gcc-help/2004- 01/msg00225.html   -  person Hans Passant    schedule 01.03.2018
comment
Мой исполняемый файл уже скомпилирован с флагом -mwindows, и если я запускаю его из папки со всеми зависимостями, черное окно не открывается. В этом случае вместо этого я хочу запустить исполняемый файл из ссылки Windows внутри среды msys2.   -  person Fabio Di Matteo    schedule 01.03.2018
comment
Параметр подсистемы важен, чтобы сообщить компоновщику, что это не приложение консольного режима. Мне непонятно, почему вы думаете, что вам нужна среда msys2, программы, созданные с помощью mingw, не нуждаются в помощи. Так что не запускайте msys2.   -  person Hans Passant    schedule 01.03.2018
comment
Да, но мне было бы очень полезно запускать графические скрипты (типа python + gtk) из окон ссылок. Не показывая пользователю неприятное черное окно терминала.   -  person Fabio Di Matteo    schedule 01.03.2018


Ответы (1)


Чтобы запустить программу в среде MSYS2 без отображения окна, вы должны щелкнуть правой кнопкой мыши на рабочем столе или в другом месте в проводнике Windows, выбрать «Создать», выбрать «Ярлык», а затем ввести что-то вроде этого для цели ярлыка:

C:\msys64\usr\bin\mintty.exe -w hide /bin/env MSYSTEM=MINGW64 /bin/bash -lc /c/path/to/your_program.exe

Обратите внимание, что здесь есть 4 пути. Пути к mintty и your_program.exe являются абсолютными путями, которые вам нужно будет настроить. Пути к env и bash относятся к каталогу установки MSYS2. Также обратите внимание, что первый путь должен быть стандартным путем Windows, поскольку Windows ожидает его при запуске ярлыка.

Объяснение

Может показаться странным использовать для этого MinTTY, но первая программа, которую мы запускаем, должна быть какой-то программой, скомпилированной для подсистемы Windows (опция -mwindows для GCC), иначе Windows автоматически запустит новую программу. консоль, когда мы запускаем программу. Мы передаем параметр -w hide в MinTTY, чтобы сообщить ему, что на самом деле не нужно показывать собственное окно. Все после этой опции интерпретируется MinTTY как команда для запуска.

Таким образом, MinTTY запустит /bin/env из дистрибутива MSYS2 и передаст ему остальные аргументы. Это удобная утилита, которая на самом деле является стандартной частью Linux, а также MSYS2. Он устанавливает для переменной среды MSYSTEM значение MINGW64 (что важно позже), а затем запускает /bin/bash с остальными аргументами командной строки. Переменная MSYSTEM выбирает, какую из трех сред MSYS2 использовать, и значениями для нее являются MSYS2, MINGW32 или MINGW64.

Мы передаем -l в Bash, чтобы он действовал как сценарий входа и запускал определенные сценарии запуска. В частности, сценарий /etc/profile из MSYS2 важен, потому что он просматривает переменную среды MSYSTEM, видит, что это MINGW64, а затем устанавливает набор других переменных среды (например, PATH), чтобы предоставить вам 64-битную среду оболочки MinGW, или какая-то другая среда, если вы изменили MSYSTEM.

Наконец, мы передаем имя вашей программы в качестве основного аргумента bash, поэтому она запустит эту программу после запуска сценариев инициализации.

person David Grayson    schedule 01.03.2018
comment
Спасибо, это работает, но мне пришлось изменить bash -l myprog.exe в bash -lc myprog.exe - person Fabio Di Matteo; 02.03.2018