2013-08-05 43 views
5

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?

+1

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ý. –

+0

@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

+0

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) –

Trả lời

-1

Tôi nghĩ bạn có thể sử dụng Trình lập lịch tác vụ để bắt đầu chương trình có đặc quyền của quản trị viên. Dưới đây là một trang web chứng minh làm thế nào để tạo ra một phím tắt chạy với quyền quản trị không có nhắc nhở UAC, nó sử dụng Task Scheduler như là cách để khởi động chương trình.

http://www.howtogeek.com/howto/windows-vista/create-administrator-mode-shortcuts-without-uac-prompts-in-windows-vista/

Nếu bạn không muốn gọi nó bằng tay, bạn vẫn có thể sử dụng các tính năng thông thường Task Scheduler để bắt đầu chương trình tự động.

+0

. như tôi đã nói với bạn trước đây.Tôi đã thử nó theo nhiều cách khác nhau. nhưng nó thường không hoạt động như mong đợi. –

0

Đoán của tôi là đầu vào chuột là mỗi phiên, vì vậy tôi sẽ đoán rằng bạn không nhận được hành vi bạn muốn vì quá trình của bạn không chạy trong số WindowsStation mà bạn muốn.