2013-08-05 40 views
5

我目前正在編寫一個使用低級別鼠標鉤子的應用程序。因爲我必須以具有管理員權限的系統啓動應用程序,所以我想創建一個服務(請參見: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; 
} 

我怎樣才能解決我的問題?該過程必須以管理員權限運行,但需要另一個上下文?

+1

如果沒有更簡單的方法去做 - 這是我無法想到的,這只是矯枉過正。如果你有一個產生過程的服務,那麼我認爲這很好。只要確保服務控制信號(停止/開始/暫停等)也傳遞給過程。通過這種方式,您擁有了一個邏輯服務,它實際上分爲兩個物理過程。 –

+0

@PreetSangha我認爲你的評論足以成爲一個答案。 – Renan

+0

只是不要忘記,有多個用戶帳戶可能同時活動(Windows XP具有「快速切換」功能,以及任何服務器版本的Windows,甚至允許兩個管理員同時登錄) –

回答

-1

我想你可能可以使用任務計劃程序以管理員權限啓動程序。

下面是一個網站,演示如何創建一個以沒有UAC提示的管理特權運行的快捷方式,它使用Task Scheduler作爲其啓動程序的方式。

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

如果不想手動調用它,你仍然可以使用任務計劃程序的常用功能自動啓動該程序。

+0

好。正如我以前告訴過你的。我已經嘗試過許多不同的方式。但它往往達不到預期的效果。 –

0

我的猜測是鼠標輸入是每個會話,所以我會猜測你沒有得到你想要的行爲,因爲你的程序沒有在你想要的WindowsStation中運行。