2013-08-05 10 views
5

Ich schreibe gerade eine Anwendung, die Lowlevel-Maus-Hooks verwendet. Da ich die Anwendung mit dem System mit Administratorrechten starten muss, wollte ich einen Dienst erstellen (siehe hier: Is this a practical use of a service?). Jetzt habe ich gerade herausgefunden, dass ein Dienst Hook-Maus-Hooks nicht verwenden kann. Also brauche ich ein neues Konzept, aber ich weiß wirklich nicht, wo ich anfangen soll. Ich habe es bereits mit einem einfachen Prozess versucht, aber ich konnte den Taskplaner nicht als Administrator beim Systemstart ausführen.Alternative zu Windows-Dienst

Also was würde ich empfehlen zu verwenden? Soll ich noch einen Windows-Dienst verwenden, um einen Prozess zu starten? Ist das nicht ein bisschen übertrieben?

EDIT: Ich habe gerade versucht, meinen Prozess zu starten, der den Haken aus dem Dienst ausführt. Der Prozess startet, aber es scheint so, als ob er sich genauso verhält wie ein einfacher Dienst. Ich kann den Haken installieren, aber der Rückruf wird nicht aufgerufen. Ich beginne den Prozess mit diesem Code:

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

Wie kann ich mein Problem zu lösen? Der Prozess muss mit Administratorrechten ausgeführt werden, benötigt jedoch einen anderen Kontext?

+1

Es ist nur Overkill, wenn es keinen einfacheren Weg gibt - woran ich nicht denken kann. Wenn Sie einen Service haben, der einen Prozess hervorbringt, dann ist das in Ordnung. Stellen Sie nur sicher, dass die Service-Steuersignale (Stopp/Start/Pause usw.) auch an den Prozess übergeben werden. Auf diese Weise haben Sie einen logischen Dienst, der tatsächlich auf zwei physische Prozesse aufgeteilt ist. –

+0

@PreetSangha Ich denke, dein Kommentar ist gut genug, um eine Antwort zu sein. – Renan

+0

Und vergessen Sie nicht, dass mehrere Benutzerkonten gleichzeitig aktiv sein können (Windows XP mit "Fast Switch" -Funktion, und jede Serverversion von Windows, die sogar zwei Admins gleichzeitig einloggen kann) –

Antwort

-1

Ich denke, Sie können möglicherweise den Taskplaner verwenden, um ein Programm mit Administratorrechten zu starten.

Hier ist eine Website, auf der gezeigt wird, wie eine Verknüpfung erstellt wird, die mit Administratorrechten ohne Eingabeaufforderungen für Benutzerkontensteuerung ausgeführt wird. Sie verwendet den Taskplaner zum Starten des Programms.

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

Wenn Sie es nicht manuell aufrufen möchten, können Sie immer noch die Taskplaner üblichen Funktionen verwenden, um automatisch das Programm zu starten.

+0

gut. wie ich dir bereits erzählte.Ich habe das schon auf viele verschiedene Arten versucht. aber es funktioniert oft nicht wie erwartet. –

0

Meine Vermutung ist Mauseingabe ist pro Sitzung, so werde ich raten, dass Sie nicht das gewünschte Verhalten erhalten, weil Ihr Prozess nicht in der WindowsStation läuft, die Sie wollen.