2013-08-05 4 views
5

Attualmente sto scrivendo un programma che utilizza ganci basso livello del mouse. Perché devo avviare l'applicazione con il sistema con privilegi di amministratore, volevo creare un servizio (vedi qui: Is this a practical use of a service?). Ora ho appena scoperto che un servizio non è in grado di utilizzare hook hook-hooks. Quindi ho bisogno di un nuovo concetto, ma non so davvero da dove cominciare. L'ho già provato con un semplice processo, ma non sono stato in grado di utilizzare l'utilità di pianificazione per eseguirlo come amministratore all'avvio del sistema.alternativa a Windows Servizio

Quindi cosa lo consiglio da usare? Devo utilizzare ancora un servizio di Windows per avviare un processo? Non è un po 'eccessivo?

EDIT: Ho appena provato ad avviare il mio processo che esegue l'hook out del servizio. Il processo inizia ma sembra che si comporti come un semplice servizio si comporta. Posso installare il gancio ma il callback non viene chiamato. Sto iniziando il processo con questo codice:

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; 
} 

Come posso risolvere il mio problema? Il processo deve essere eseguito con i diritti di amministratore ma ha bisogno di un altro contesto?

+1

È eccessivo se non c'è un modo più semplice per farlo, cosa a cui non riesco a pensare. Se hai un servizio che genera un processo, allora penso che vada bene. Basta fare in modo che i segnali di controllo del servizio (stop/start/pause, ecc.) Siano passati anche al processo. In questo modo hai un servizio logico, che in realtà è diviso in due processi fisici. –

+0

@PreetSangha Penso che il tuo commento sia abbastanza buono per essere una risposta. – Renan

+0

E non dimenticare che ci sono più account utente attivi contemporaneamente (Windows XP con funzionalità "switch rapido" e qualsiasi versione server di Windows che consente anche a due amministratori di accedere contemporaneamente) –

risposta

-1

Penso che potresti essere in grado di utilizzare l'Utilità di pianificazione per avviare un programma con i privilegi di amministratore.

Ecco un sito Web che mostra come creare un collegamento che viene eseguito con privilegi di amministratore senza prompt UAC, utilizza l'Utilità di pianificazione come metodo per avviare il programma.

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

Se non si vuole invocare manualmente, è comunque possibile utilizzare le caratteristiche abituali della Task Scheduler per avviare automaticamente il programma.

+0

bene. come ti ho detto prima.l'ho già provato in molti modi diversi. ma spesso non funziona come previsto. –

0

La mia ipotesi è l'input del mouse è per sessione, quindi ho intenzione di indovinare che non si ottiene il comportamento desiderato perché il processo non è in esecuzione nel WindowsStation che si desidera.