Qual é a relação entre php.exe, php-win.exe e cmd.exe no Windows?
Por todos os meus anos executando PHP CLI no Windows, comecei meus scripts com .batarquivos como este:
php test.php
phpresolve C:\PHP\php.exedevido ao meu PATH.
Sem problemas com isso. Exceto que eles sempre recebem aquele cmd.exeícone / grupo da barra de tarefas irritante .
Então, há apenas alguns minutos, criei um atalho na minha área de trabalho diretamente para C:\PHP\php.exee insira o caminho completo para o meu script como um argumento para ele. Agora, quando clico duas vezes no ícone "PHP" na minha área de trabalho, ele não abre cmd.exe, mas o PHP.exe diretamente, de modo que obtém um ícone do PHP em vez do ícone cmd.exe e se coloca em seu próprio grupo da barra de tarefas.
No entanto, além do ícone, ele parece idêntico em todos os outros aspectos ao cmd.exe. Tenho quase certeza de que é cmd.exe, apenas com o ícone do PHP. Ou é algum tipo de terminal personalizado, totalmente separado do cmd.exe?
Também existe um php-win.exeexecutável em C:\PHP. Nunca consegui descobrir o que é isso ou como difere do php.exemesmo diretório. Se eu fizer a mesma coisa que acima com ele, ele trava instantaneamente com o erro de PHP registrado:
cli_get_process_title(): cli_get_process_title had an error: Windows error code: 6
Não há nenhuma menção no arquivo "README" sobre este executável.
Muitas vezes experimentei e tentei usar o PowerShell, mas sempre há falhas e problemas estranhos com ele, e é por isso que me fixei no cmd.exe. Além disso, ter que fazer uma tonelada de atalhos o tempo todo e editar seus argumentos para representar os caminhos completos para meus scripts PHP é muito pior do que ter arquivos .bat que executam meus scripts PHP de uma maneira muito mais agradável, embora com o cmd incômodo. ícone exe em vez do PHP.
Aparentemente, ouço falar desse "Windows Terminal" há anos, mas ainda não está em lugar nenhum na minha máquina.
Idealmente, eu gostaria de poder ter meu próprio ícone personalizado, nem retirado do cmd.exe nem do php.exe, mas a única maneira que encontrei de fazer isso no passado é copiar o cmd.exe, modificá-lo e em seguida, use-o em todos os lugares. Essa não é uma solução elegante ou sensata.
Explique-me para que serve php-win.exe, se php.exe é na verdade apenas cmd.exe com um ícone diferente e se há algo simples que posso fazer para obter meu próprio ícone / marca para meu sistema PHP CLI.
Respostas
Sem problemas com isso. Exceto que eles sempre recebem aquele ícone cmd.exe irritante / grupo da barra de tarefas.
Eles o farão, porque os scripts .bat sempre são executados por meio do cmd.exe (como - então eles obtêm qualquer janela de console que o próprio cmd.exe obtém.
No entanto, além do ícone, ele parece idêntico em todos os outros aspectos ao cmd.exe. Tenho quase certeza de que é cmd.exe, apenas com o ícone do PHP. Ou é algum tipo de terminal personalizado, totalmente separado do cmd.exe?
O terminal sempre foi separado do cmd.exe. Você está olhando para a janela padrão do console do Windows, agora também conhecida como Conhost . (Na era Win2000 / XP, fazia parte do CSRSS.)
O cmd.exe e o php.exe não têm interface gráfica do usuário própria - eles apenas invocam o Conhost magicamente quando iniciados.
Também existe um executável php-win.exe em C: \ PHP. Eu nunca fui capaz de descobrir o que é isso ou como ele difere do php.exe no mesmo diretório.
Conforme mencionado, php.exe invoca a janela do terminal Conhost quando iniciado - mas isso não é algo que php.exe faz , na verdade acontece automaticamente porque o Windows reconhece que o arquivo php.exe está marcado como "aplicativo de console". Ele sempre será iniciado em um console, seja um herdado de cmd.exe (ao executar um script .bat) ou um novo (ao clicar duas vezes em php.exe).
Portanto, php-win.exe é quase exatamente a mesma coisa, mas o arquivo .exe não está marcado como "console" - é marcado como "aplicativo GUI" em vez disso, e será executado completamente invisível (a menos que você o use para executar um script que por exemplo, chama PHP-GTK ou PHP / Tk para criar janelas GUI).
Pelo mesmo motivo, Python vem com python.exe e pythonw.exe no Windows - um é para construir ferramentas baseadas principalmente em CLI, o outro para construir aplicativos gráficos.
Aparentemente, ouço falar desse "Windows Terminal" há anos, mas ainda não está em lugar nenhum na minha máquina.
Ele pode ser instalado por meio da Microsoft Store se você tiver o Windows 10.
(Observe que se você instalá-lo, ele não substituirá completamente o Conhost - ele só será usado quando você abrir o aplicativo Terminal por conta própria. Clicar duas vezes em um console .exe ainda o exibirá no Conhost.)
Idealmente, eu gostaria de poder ter meu próprio ícone personalizado, nem retirado do cmd.exe nem do php.exe, mas a única maneira que encontrei de fazer isso no passado é copiar o cmd.exe, modificá-lo e em seguida, use-o em todos os lugares. Essa não é uma solução elegante ou sensata.
Copie php.exe e modifique esse. Ou use php-win.exe junto com algum módulo PECL (talvez w32api) que permite criar uma janela de console sob demanda.