我目前正在編寫一個使用低級別鼠標鉤子的應用程序。因爲我必須以具有管理員權限的系統啓動應用程序,所以我想創建一個服務(請參見:Is this a practical use of a service?)。 現在我發現一個服務不能使用鉤子鼠標掛鉤。所以我需要一個新的概念,但我真的不知道從哪裏開始。我已經通過一個簡單的過程嘗試過了,但我無法使用任務計劃程序在系統啓動時以管理員身份運行它。Windows服務的替代
那麼會推薦使用什麼?我還應該使用Windows服務來啓動一個過程嗎?這是不是有點矯枉過正?
編輯:我剛剛嘗試啓動我的過程,執行鉤服務。該過程開始,但它看起來像一個簡單的服務行爲一樣。我可以安裝鉤子,但回調不會被調用。 我開始的過程與此代碼:
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;
}
我怎樣才能解決我的問題?該過程必須以管理員權限運行,但需要另一個上下文?
如果沒有更簡單的方法去做 - 這是我無法想到的,這只是矯枉過正。如果你有一個產生過程的服務,那麼我認爲這很好。只要確保服務控制信號(停止/開始/暫停等)也傳遞給過程。通過這種方式,您擁有了一個邏輯服務,它實際上分爲兩個物理過程。 –
@PreetSangha我認爲你的評論足以成爲一個答案。 – Renan
只是不要忘記,有多個用戶帳戶可能同時活動(Windows XP具有「快速切換」功能,以及任何服務器版本的Windows,甚至允許兩個管理員同時登錄) –