Tôi hiện đang viết một ứng dụng sử dụng móc chuột lowlevel. Vì tôi phải khởi động ứng dụng với hệ thống có đặc quyền quản trị viên, tôi muốn tạo một dịch vụ (xem tại đây: Is this a practical use of a service?). Bây giờ tôi vừa phát hiện ra rằng một dịch vụ không thể sử dụng móc móc móc. Vì vậy, tôi cần một khái niệm mới nhưng tôi thực sự không biết bắt đầu từ đâu. Tôi đã thử nó với một quá trình đơn giản nhưng tôi đã không thể sử dụng công cụ lên lịch để chạy nó như là quản trị viên khi khởi động hệ thống.Thay thế cho Dịch vụ Windows
Vì vậy, bạn nên sử dụng điều gì? Tôi có nên sử dụng Dịch vụ Windows để bắt đầu quá trình không? Đó có phải là một chút overkill?
CHỈNH SỬA: Tôi vừa mới bắt đầu quá trình thực hiện móc từ dịch vụ. Quá trình này bắt đầu nhưng có vẻ như, nó hoạt động giống như một dịch vụ đơn giản ứng xử. Tôi có thể cài đặt móc nhưng gọi lại không được gọi. Tôi đang bắt đầu quá trình với mã này:
STARTUPINFO info={sizeof(info)};
PROCESS_INFORMATION processInfo;
if (!CreateProcess(path, NULL, NULL, NULL, TRUE, 0, NULL, NULL, &info, &processInfo))
{
std::wstring msg(L"Could not start \"");
msg.append(path);
msg.append(L"\". CreateProcess");
WriteErrorLogEntry((PWSTR)msg.c_str());
return;
}
Làm cách nào để giải quyết vấn đề của tôi? Quá trình này phải chạy với quyền quản trị viên nhưng cần một ngữ cảnh khác?
Chỉ quá mức cần thiết nếu không có cách nào đơn giản hơn để làm điều đó - điều mà tôi không thể nghĩ ra. Nếu bạn có một dịch vụ mà sinh ra một quá trình thì tôi nghĩ điều đó là tốt. Chỉ cần đảm bảo rằng các tín hiệu điều khiển dịch vụ (dừng/bắt đầu/tạm dừng, vv) cũng được truyền cho quá trình này. Bằng cách này bạn có một dịch vụ hợp lý, điều đó thực sự được chia thành hai quy trình vật lý. –
@PreetSangha Tôi nghĩ rằng bình luận của bạn là đủ tốt để trở thành một câu trả lời. – Renan
Và đừng quên rằng có nhiều tài khoản người dùng có thể hoạt động đồng thời (Windows XP với tính năng "chuyển đổi nhanh" và bất kỳ phiên bản máy chủ Windows nào cho phép cả hai quản trị viên đăng nhập đồng thời) –