2009-07-01 15 views
5

Bất cứ ai có thể cho tôi biết cách tạo quy trình trong VC++? Tôi cần phải thực hiệnLàm thế nào để tạo một quy trình trong C++ trên Windows?

regasm.exe testdll /tlb:test.tlb /codebase 

lệnh trong quy trình đó.

+1

Không phải là bản dupe. Đó là câu hỏi khác giả định rằng CreateProcess là cách duy nhất để làm điều đó. Cái này mở rộng hơn. Đối với hồ sơ, quy tắc được đề xuất là http://stackoverflow.com/questions/42531/how-do-i-call-createprocess-in-c-to-launch-a-windows-executable - Tôi đã lấy nó ra của câu hỏi kể từ khi tôi xem xét nó hình thức xấu để chỉnh sửa nội dung. Tôi tin rằng nên được đưa vào trong ý kiến. Nếu nó bị đóng dưới dạng bản dupe, thì bản thân SO sẽ thêm nó vào câu hỏi. – paxdiablo

Trả lời

4

Nếu bạn chỉ muốn thực hiện lệnh đồng bộ (chạy và chờ), đặt cược tốt nhất của bạn là chỉ sử dụng cuộc gọi system() (xem here) để chạy. Có, tôi biết đó là một trang Linux nhưng C là một tiêu chuẩn, phải không? :-)

Để kiểm soát chi tiết hơn những gì được chạy, cách chạy (đồng bộ/không đồng bộ) và nhiều tùy chọn hơn, CreateProcess() (xem here) và các anh em của nó có lẽ tốt hơn, mặc dù bạn sẽ gắn với nền tảng Windows (có thể không liên quan đến bạn ngay lập tức).

3

Sử dụng CreateProcess() để sinh ra quy trình, kiểm tra giá trị trả về để đảm bảo rằng nó bắt đầu ổn, sau đó đóng các chốt xử lý cho quy trình và chuỗi hoặc sử dụng WaitForSingleObject() để đợi cho đến khi nó kết thúc và sau đó đóng chốt.

10

regasm.exe (hội Tool Đăng ký doanh nghiệp) làm thay đổi Windows Registry, vì vậy nếu bạn muốn bắt đầu regasm.exe quá trình như cao bạn có thể sử dụng đoạn mã sau:

#include "stdafx.h" 
#include "windows.h" 
#include "shellapi.h" 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
     SHELLEXECUTEINFO shExecInfo; 

     shExecInfo.cbSize = sizeof(SHELLEXECUTEINFO); 

     shExecInfo.fMask = NULL; 
     shExecInfo.hwnd = NULL; 
     shExecInfo.lpVerb = L"runas"; 
     shExecInfo.lpFile = L"regasm.exe"; 
     shExecInfo.lpParameters = L"testdll /tlb:test.tlb /codebase"; 
     shExecInfo.lpDirectory = NULL; 
     shExecInfo.nShow = SW_NORMAL; 
     shExecInfo.hInstApp = NULL; 

     ShellExecuteEx(&shExecInfo); 

     return 0; 
} 

shExecInfo.lpVerb = L"runas" có nghĩa là quá trình sẽ được bắt đầu với cao đặc quyền. Nếu bạn không muốn chỉ cần đặt shExecInfo.lpVerb thành NULL. Nhưng trong Vista hoặc Windows 7, cần có quyền quản trị viên để thay đổi một số phần của Windows Registry.

+0

Nó hoạt động tốt hơn so với Above.But trong khi đó nó là yêu cầu theo đó người dùng nó phải chạy .. u có thể giải thích về prog này SHELLEXECUTEINFO shExecInfo; shExecInfo.lpVerb = L "runas"; – Cute

+0

Tôi đã sửa đổi l "run as" thành null rồi hoạt động mà không hỏi. ok L này phù hợp với cái gì và quá trình được tạo ra như thế nào? – Cute

+0

L là cho chuỗi Unicode. –

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