Mối quan hệ giữa php.exe, php-win.exe và cmd.exe trên Windows là gì?

Sep 05 2020

Trong suốt nhiều năm chạy PHP CLI trên Windows, tôi đã bắt đầu các tập lệnh của mình với .batcác tệp như sau:

php test.php

phpgiải quyết C:\PHP\php.exedo của tôi PATH.

Không có vấn đề với điều này. Ngoại trừ việc họ luôn nhận được cmd.exenhóm biểu tượng / thanh tác vụ khó chịu đó .

Vì vậy, chỉ vài phút trước, thay vào đó, tôi đã tạo một lối tắt trực tiếp trên màn hình của mình C:\PHP\php.exevà nhập đường dẫn đầy đủ đến tập lệnh của tôi làm đối số cho nó. Bây giờ, khi tôi nhấp đúp vào biểu tượng "PHP" đó trên màn hình của mình, nó sẽ không mở ra cmd.exemà là PHP.exe trực tiếp, để nó nhận được biểu tượng PHP thay vì biểu tượng cmd.exe và tự đặt nó vào nhóm Thanh tác vụ của riêng nó.

Tuy nhiên, bên cạnh biểu tượng, nó trông giống hệt cmd.exe theo mọi cách. Tôi khá chắc chắn rằng đó là cmd.exe, chỉ với biểu tượng PHP. Hay đây là một số loại thiết bị đầu cuối tùy chỉnh, được tách hoàn toàn khỏi cmd.exe?

Cũng có một php-win.exetệp thực thi trong C:\PHP. Tôi chưa bao giờ có thể tìm ra đây là gì hoặc nó khác gì so với php.exetrong cùng một dir. Nếu tôi làm điều tương tự như trên với nó, nó ngay lập tức bị lỗi với lỗi PHP đã ghi:

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

Không có bất kỳ đề cập nào trong tệp "README" về tệp thực thi này.

Tôi đã nhiều lần thử nghiệm và cố gắng sử dụng PowerShell, nhưng luôn có những trục trặc và vấn đề kỳ lạ với nó, đó là lý do tại sao tôi mắc kẹt với cmd.exe. Ngoài ra, việc phải tạo hàng đống phím tắt mọi lúc và chỉnh sửa các đối số của chúng để đại diện cho các đường dẫn đầy đủ đến các tập lệnh PHP của tôi tệ hơn nhiều so với việc có các tệp .bat chạy các tập lệnh PHP của tôi theo cách đẹp hơn nhiều, mặc dù với cmd pesky. biểu tượng exe thay vì biểu tượng PHP.

Điều này "Windows Terminal" dường như tôi đã nghe trong nhiều năm, nhưng nó vẫn không được tìm thấy trên máy của tôi.

Lý tưởng nhất là tôi muốn có biểu tượng tùy chỉnh của riêng mình, không được lấy từ cmd.exe hay php.exe, nhưng cách duy nhất tôi đã tìm thấy để làm điều đó trong quá khứ là sao chép cmd.exe, sửa đổi nó và sau đó sử dụng nó ở mọi nơi. Đó không phải là một giải pháp thanh lịch hay hợp lý.

Vui lòng giải thích cho tôi biết php-win.exe dùng để làm gì, liệu php.exe có thực sự chỉ là cmd.exe với một biểu tượng khác hay không và nếu có điều gì đó đơn giản tôi có thể làm để lấy biểu tượng / thương hiệu của riêng mình cho hệ thống PHP CLI của mình.

Trả lời

1 user1686 Sep 05 2020 at 17:37

Không có vấn đề với điều này. Ngoại trừ họ luôn nhận được biểu tượng cmd.exe phiền phức / nhóm thanh tác vụ.

Họ sẽ làm như vậy, bởi vì các tập lệnh .bat luôn chạy qua cmd.exe (như - vì vậy họ nhận được bất cứ thứ gì mà bản thân cửa sổ điều khiển cmd.exe nhận được.

Tuy nhiên, bên cạnh biểu tượng, nó trông giống hệt cmd.exe theo mọi cách. Tôi khá chắc chắn rằng đó là cmd.exe, chỉ với biểu tượng PHP. Hay đây là một số loại thiết bị đầu cuối tùy chỉnh, được tách hoàn toàn khỏi cmd.exe?

Thiết bị đầu cuối luôn tách biệt với cmd.exe. Bạn đang nhìn vào cửa sổ Windows Console tiêu chuẩn, hiện còn được gọi là Conhost . (Trong thời đại Win2000 / XP, nó là một phần của CSRSS.)

Cả cmd.exe và php.exe đều không có giao diện người dùng đồ họa của riêng chúng - chúng chỉ gọi Conhost một cách kỳ diệu khi khởi động.

Ngoài ra còn có một tệp thực thi php-win.exe trong C: \ PHP. Tôi chưa bao giờ có thể tìm ra đây là gì hoặc nó khác với php.exe như thế nào trong cùng một dir.

Như đã đề cập, php.exe gọi cửa sổ đầu cuối Conhost khi khởi động - nhưng đó không phải là điều mà php.exe thực hiện , nó thực sự xảy ra tự động vì Windows nhận ra rằng tệp php.exe được đánh dấu là "ứng dụng bảng điều khiển". Nó sẽ luôn được khởi chạy trong bảng điều khiển, cho dù đó là bảng kế thừa từ cmd.exe (khi chạy tập lệnh .bat) hay là một cái mới (khi nhấp đúp vào php.exe).

Vì vậy, php-win.exe gần như giống hệt nhau, nhưng tệp .exe không được đánh dấu là "bảng điều khiển" - thay vào đó, nó được đánh dấu là "ứng dụng GUI" và sẽ chạy hoàn toàn ẩn (trừ khi bạn sử dụng nó để chạy một tập lệnh ví dụ: gọi PHP-GTK hoặc PHP / Tk để tạo cửa sổ GUI).

Vì lý do tương tự, Python đi kèm với python.exe và pythonw.exe trên Windows - một là để xây dựng các công cụ chủ yếu dựa trên CLI, còn lại để xây dựng các ứng dụng đồ họa.

Điều này "Windows Terminal" dường như tôi đã nghe trong nhiều năm, nhưng nó vẫn không được tìm thấy trên máy của tôi.

Nó có thể cài đặt thông qua Microsoft Store nếu bạn có Windows 10.

(Lưu ý rằng nếu bạn cài đặt nó, nó sẽ không thay thế Conhost hoàn toàn - nó sẽ chỉ được sử dụng khi bạn tự mở ứng dụng Terminal. Nhấp đúp vào bảng điều khiển .exe sẽ vẫn hiển thị nó trong Conhost.)

Lý tưởng nhất là tôi muốn có biểu tượng tùy chỉnh của riêng mình, không được lấy từ cmd.exe hay php.exe, nhưng cách duy nhất tôi đã tìm thấy để làm điều đó trong quá khứ là sao chép cmd.exe, sửa đổi nó và sau đó sử dụng nó ở mọi nơi. Đó không phải là một giải pháp thanh lịch hay hợp lý.

Sao chép php.exe và sửa đổi nó. Hoặc sử dụng php-win.exe cùng với một số mô-đun PECL (có thể là w32api) cho phép bạn tạo một cửa sổ bảng điều khiển theo yêu cầu.