2016-10-07 14 views
5

Tôi đang chạy sau thông qua một kịch bản PHP từ xa kết nối với SSH:CMD bắt đầu cũng không PSExec mở ứng dụng tương tác trong foreground khi sử dụng PHP để kết nối với SSH

cmd /C start "" /MAX /b "C:\Windows\System32\notepad.exe" 

Quá trình này không bắt đầu tuy nhiên nó vẫn còn trong nền và sẽ không mở hoàn toàn trên màn hình từ xa. Có cách nào để làm cho nó hoạt động tương tác (như PSExec có cờ -i) không?

Edit:

Vì vậy, PHP kết nối SSH với ssh2_connect sau đó sử dụng ssh2_exec theo cách sau đây:

 if (!($stream = ssh2_exec($con, $shcom))) { 

nơi $shcom là lệnh truyền cho SSH, chẳng hạn như:

$shcom = 'cmd.exe /C start "" /MAX "%SystemRoot%\System32\calc.exe"'; 

Trước đây tôi đã sử dụng PSExec và PuTTY (lưu ý không thông qua tập lệnh PHP) để mở notepad.exe theo cách thủ công trên điều khiển từ xa máy qua các bước sau:

cd "C:\Program Files\PSExec\" & psexec \\localhost -i 2 -ds "C:\Windows\System32\notepad.exe" 

đã hoạt động thành công tuy nhiên chức năng này cũng không hoạt động đúng cách thông qua PHP. Hiện tại, cả CMD và PSExec đều không thể hiển thị ứng dụng tương tác ở mặt trước tự động.

+0

Chỉ cửa sổ nền trước hoặc chương trình mới được bắt đầu (2 giây) có thể đặt cửa sổ vào nền trước. Để truy xuất văn bản của điều khiển trong một tiến trình khác, hãy gửi tin nhắn WM_GETTEXT trực tiếp thay vì gọi GetWindowText. Xem https://msdn.microsoft.com/en-us/library/windows/desktop/ms633539(v=vs.85).aspx để biết danh sách đầy đủ các quy tắc. PSExec sao chép chính nó vào hệ thống đích bằng cách sử dụng chia sẻ quản trị viên. Sau đó kết nối với Bộ điều khiển dịch vụ của mục tiêu và tự cài đặt như một dịch vụ. Sau đó bắt đầu chương trình. Windows đã dành nhiều thập kỷ viết mã ngăn chặn các cửa sổ ăn cắp tập trung. –

+0

Không có tính năng của cửa sổ để cho phép các chương trình chạy từ xa để can thiệp vào người dùng tương tác trên hệ thống từ xa. –

+0

Để tham khảo đoạn mã cuối cùng tôi đã đăng không hoạt động để bắt đầu quá trình notepad ở nền trước, nhưng CHỈ nếu tôi gửi nó theo cách thủ công qua PuTTY. Bạn có biết cú pháp chính xác nào cho tập lệnh PHP để thực hiện điều này không? – Talisman

Trả lời

1

Mở cửa sổ nhắc lệnh và chạy đầu tiên cmd /? và thứ hai start /? và đọc cả hai lần trợ giúp đầu ra.

cmd /C bắt đầu quy trình lệnh Windows mới được đóng tự động vì /C khi lệnh được áp dụng bổ sung để thực thi trong quá trình lệnh chấm dứt.

Lệnh start "" /MAX /B bắt đầu một quá trình lệnh hơn với một chuỗi rỗng như tiêu đề cửa sổ và bắt đầu trong quá trình lệnh này áp dụng GUI Notepad của Windows cần được bắt đầu với một cửa sổ tối đa vì /MAX nhưng mà nên chạy ở chế độ nền (= không có cửa sổ hiển thị) vì /b.

Vì vậy, lỗi đang sử dụng /b là thực sự muốn bắt đầu Notepad ở nền trước với cửa sổ tối đa thay vì nền không có cửa sổ.

Và Windows không được cài đặt chắc chắn trên ổ C: trong thư mục có tên Windows. Vì vậy nó là tốt hơn để sử dụng một trong hai lệnh:

cmd.exe /C start "" /MAX "%SystemRoot%\System32\notepad.exe" 
cmd.exe /C start "" /MAX "%windir%\System32\notepad.exe" 

Biến môi trường windir có thể thay đổi một môi trường hiện tại theo mặc định từ Windows 95 với đường dẫn đến thư mục của chạy Windows.

Biến môi trường SystemRoot là biến môi trường được xác định trước bởi tất cả các phiên bản Windows dựa trên Windows NT có đường dẫn đến thư mục Windows.

Ngày nay tốt hơn nên sử dụng SystemRoot vì biến môi trường này được tích hợp sẵn trong Windows trong khi windir chỉ được xác định trước trong danh sách biến môi trường hệ thống và do đó cũng có thể bị xóa.

Xem bài viết Wikipedia về Windows Environment Variables để biết danh sách các biến môi trường được xác định trước có mô tả.

+0

Cảm ơn câu trả lời chi tiết Mofi! Quá trình chạy với ví dụ đầu tiên bạn cung cấp tuy nhiên nó vẫn còn trong nền. – Talisman

+0

Tôi đã thêm thông tin bổ sung trong bản chỉnh sửa cho bạn. – Talisman

+0

OK. Với nhiệm vụ được giải thích rõ ràng hơn trong câu hỏi, tôi hiểu rõ hơn những gì bạn cố gắng đạt được. Thật không may tôi không thể giúp thêm về vấn đề này vì không có kinh nghiệm với việc sử dụng PHP để tương tác chạy các ứng dụng trên một máy từ xa. Tôi giữ câu trả lời của tôi vì nó ít nhất giải thích một lý do tại sao các ứng dụng bắt đầu đã không được mở tối đa trong foreground trên máy từ xa. – Mofi

Các vấn đề liên quan