2010-02-11 73 views
7

Tôi muốn thực thi từ xa một ứng dụng khác từ chương trình C++ của mình. Cho đến nay tôi đã chơi cùng với hàm CreateProcess (...) và nó hoạt động tốt.Thực hiện một chương trình khác trong C++

Tuy nhiên, vấn đề là tôi cần đường dẫn đầy đủ của chương trình khác nhưng tôi không biết thư mục của chương trình đó. Vì vậy, những gì tôi muốn là tôi chỉ cần nhập tên của chương trình khác, như khi bạn gõ "cmd" hoặc "winword" vào Run ... nó sẽ mở ra các chương trình tương ứng.

Cảm ơn trước, Russo

+1

Đặt đường dẫn đầy đủ của ứng dụng vào biến môi trường PATH. – anil

+0

@anil: không hoạt động; biến môi trường PATH (mặc dù tên của nó) thường là một _list_ của các đường dẫn. Bạn cần cái nào trong số đó? – MSalters

+0

Phân tích biến PATH và cho mỗi phần tử kiểm tra xem chương trình có tồn tại ở đó :-) –

Trả lời

7

Bạn đang tìm kiếm ShellExecute(). Điều đó thậm chí sẽ hoạt động nếu bạn chuyển nó một URL thích hợp, giống như menu Run.

1

Các thư mục của chương trình bạn có thể chạy từ đầu -> chạy được thêm vào biến PATH. Bạn có thể thêm thư mục chương trình của bạn vào PATH và sau đó sử dụng CreateProcess(). Tuy nhiên, bạn nói rằng bạn không biết thư mục, vì vậy bạn có thể không làm được điều này.

Bạn có biết một phần đường dẫn không? Ví dụ, bạn có biết rằng exe của bạn sẽ luôn ở trong C: \ something \ something \ hoặc một thư mục con của đường dẫn này? Nếu vậy, hãy tìm FindFirst() và FindNext() để liệt kê tất cả các tệp trong thư mục đó và tìm kiếm exe của bạn, sau đó sử dụng CreateProcess() khi bạn tìm thấy exe của mình.

http://msdn.microsoft.com/en-us/library/aa365200%28VS.85%29.aspx cho biết cách liệt kê tệp trong thư mục. Bạn sẽ phải sửa đổi nó để tìm kiếm các thư mục con (ví dụ, tạo một hàm đệ quy).

1

Khởi chạy chương trình và tính PATH theo bất kỳ cách nào được coi là mã hóa không an toàn. Hệ thống PATHs có thể bị ô nhiễm với các vị trí không được bảo mật đúng như ổ đĩa mạng. Cách tốt nhất để khởi chạy một ứng dụng là khởi chạy tệp thực thi từ chính xác vị trí của nó và đặt CWD vào vị trí của tệp thực thi như được cài đặt. Nếu không, bạn có thể khởi chạy mã độc hại.

Nhiều khả năng kết hợp một số thông tin từ đây sẽ giúp có được vị trí chính xác: Detecting installed programs via registry

Greg

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