Windows 上 php.exe 、 php-win.exe 和 cmd.exe 之间有什么关系?

Windows 上 php.exe 、 php-win.exe 和 cmd.exe 之间有什么关系?

我多年来一直在 Windows 上运行 PHP CLI,我的脚本都是用.bat这样的文件启动的:

php test.php

php决定C:\PHP\php.exe由于我的PATH

这没什么问题。只是他们总是得到那个讨厌的cmd.exe图标/任务栏组。

因此,几分钟前,我改为在桌面上直接创建了 的快捷方式C:\PHP\php.exe,并输入了脚本的完整路径作为参数。现在,当我双击桌面上的“PHP”图标时,它不会打开cmd.exe,而是直接打开 PHP.exe,因此它会获得 PHP 图标而不是 cmd.exe 图标,并将自身置于自己的任务栏组中。

但是,除了图标之外,它在其他方面看起来都与 cmd.exe 完全相同。我敢肯定它cmd.exe,只带有 PHP 图标。或者这是某种自定义终端,与 cmd.exe 完全分离?

php-win.exe中还有一个可执行文件C:\PHP。我一直无法弄清楚这是什么,也不知道它与php.exe同一目录中的有何不同。如果我对它执行与上述相同的操作,它会立即崩溃并记录 PHP 错误:

cli_get_process_title(): cli_get_process_title had an error: Windows error code: 6

“README”文件中没有提及任何有关此可执行文件的内容。

我曾多次尝试使用 PowerShell,但总是会出现奇怪的故障和问题,这就是我坚持使用 cmd.exe 的原因。此外,必须一直创建大量快捷方式并编辑它们的参数以表示我的 PHP 脚本的完整路径,这比使用 .bat 文件更糟糕,因为 .bat 文件可以以更好的方式运行我的 PHP 脚本,尽管使用的是讨厌的 cmd.exe 图标而不是 PHP 图标。

我似乎已经听说过这个“Windows 终端”好几年了,但在我的计算机上仍然找不到它。

理想情况下,我希望能够拥有自己的自定义图标,既不是从 cmd.exe 也不是从 php.exe 中获取的,但过去我发现这样做的唯一方法是复制 cmd.exe,修改它,然后在任何地方使用它。那就是不是一个优雅或合理的解决方案。

请向我解释 php-win.exe 的用途,php.exe 是否实际上只是带有不同图标的 cmd.exe,以及我是否可以做一些简单的事情来为我的 PHP CLI 系统获取自己的图标/品牌。

答案1

这没什么问题。只是他们总是得到那个讨厌的 cmd.exe 图标/任务栏组。

会,因为 .bat 脚本总是通过 cmd.exe 运行(例如 – 所以它们会获得 cmd.exe 本身获得的任何控制台窗口。

但是,除了图标之外,它在其他方面看起来都与 cmd.exe 完全相同。我很确定它是 cmd.exe,只是带有 PHP 图标。或者这是某种自定义终端,与 cmd.exe 完全分开?

终端有总是与 cmd.exe 分开。您正在查看的是标准 Windows 控制台窗口,现在也称为康霍斯特. (在Win2000/XP时代它是CSRSS的一部分。)

cmd.exe 和 php.exe 都没有自己的图形用户界面——它们只是在启动时神奇地调用 Conhost。

C:\PHP 中还有一个可执行文件 php-win.exe。我一直搞不清楚这是什么,也搞不清楚它与同一目录中的 php.exe 有何不同。

如上所述,php.exe 在启动时会调用 Conhost 终端窗口 - 但这不是 php.exe,它实际上是自动发生的,因为 Windows 识别出 php.exe 文件被标记为“控制台应用程序”。它将总是在控制台中启动,无论它是从 cmd.exe 继承的(运行 .bat 脚本时)还是新的(双击 php.exe 时)。

因此 php-win.exe 几乎完全相同,但 .exe 文件是不是标记为“控制台”——而是标记为“GUI 应用程序”,并且将完全不可见地运行(除非您使用它来运行脚本,例如调用 PHP-GTK 或 PHP/Tk 来创建 GUI 窗口)。

出于同样的原因,Python 在 Windows 上附带 python.exe 和 pythonw.exe——一个用于构建主要用于 CLI 的工具,另一个用于构建图形应用程序。

我似乎已经听说过这个“Windows 终端”好几年了,但在我的计算机上仍然找不到它。

如果您使用的是 Windows 10,则可以通过 Microsoft Store 安装它。

(请注意,如果您安装它,它不会完全取代 Conhost - 它只会在您自己打开终端应用程序时使用。双击控制台 .exe 仍会在 Conhost 中显示它。)

理想情况下,我希望能够拥有自己的自定义图标,既不是从 cmd.exe 也不是从 php.exe 中获取的,但我发现过去唯一的方法是复制 cmd.exe,修改它,然后在任何地方使用它。这不是一个优雅或明智的解决方案。

复制 php.exe 并修改它。或者将 php-win.exe 与一些 PECL 模块(可能是 w32api)一起使用,这样您就可以根据需要创建控制台窗口。

相关内容