2013-08-05 13 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

私は考えることができない簡単な方法がないのは残念です。あなたがプロセスを生み出すサービスを持っているなら、それはいいと思います。サービス制御信号(停止/開始/一時停止など)もプロセスに渡されるようにしてください。このように、論理的なサービスがあります。実際には2つの物理的プロセスに分割されています。 –

+0

@PreetSangha私はあなたのコメントが答えになるのに十分だと思います。 – Renan

+0

そして、複数のユーザーアカウントが同時にアクティブになっている可能性があることを忘れないでください(Windows XPの「高速切り替え」機能と、2人の管理者が同時にログインできるWindowsのサーバーバージョン) –

答えて

-1

タスクスケジューラを使用して管理者権限でプログラムを起動できる場合があります。

ここには、UACプロンプトが表示されない管理者権限で実行されるショートカットを作成する方法を示すWebサイトがあり、プログラムの起動方法としてタスクスケジューラが使用されています。

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

あなたはそれを手動で起動したくない場合でも、自動的にプログラムを起動するタスクスケジューラの通常の機能を使用することができます。

+0

。前に言ったように。私はすでに多くの異なる方法でそれを試みました。しかし、それはしばしば期待どおりに機能しません。 –

0

私の推測では、マウス入力はセッションごとに行われるので、プロセスが実行していないために必要な動作が得られていないと推測します。WindowsStationです。

関連する問題