私は現在、低レベルのマウスフックを使用するアプリケーションを作成しています。管理者権限を持つシステムでアプリケーションを起動する必要があるため、サービスを作成したかったのです(ここでは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;
}
どのように私は私の問題を解決することができますか?プロセスは管理者権限で実行する必要がありますが、別のコンテキストが必要ですか?
私は考えることができない簡単な方法がないのは残念です。あなたがプロセスを生み出すサービスを持っているなら、それはいいと思います。サービス制御信号(停止/開始/一時停止など)もプロセスに渡されるようにしてください。このように、論理的なサービスがあります。実際には2つの物理的プロセスに分割されています。 –
@PreetSangha私はあなたのコメントが答えになるのに十分だと思います。 – Renan
そして、複数のユーザーアカウントが同時にアクティブになっている可能性があることを忘れないでください(Windows XPの「高速切り替え」機能と、2人の管理者が同時にログインできるWindowsのサーバーバージョン) –