Windows Messaging System を使用する Windows サービスを作成しました。デバッガーからアプリをテストすると、メッセージはうまくいきますが、インストールするとメッセージが… 14 分前に質問されました
ウラジミール・トゥガ
Windows Messaging System を使用する Windows サービスを作成しました。デバッガーからアプリをテストすると、メッセージはうまくいきますが、インストールするとメッセージが… 14 分前に質問されました
ウラジミール・トゥガ
通常、サービスはウィンドウ メッセージを受け取りません。必ずしもウィンドウ ハンドルを持っているとは限りません。たとえそうであっても、それらは別のデスクトップで実行されます。プログラムはあるデスクトップから別のデスクトップにメッセージを送信できないため、サービスは別のサービスから、またはサービスによって開始されたプログラムからのみメッセージを受信できます。
Windows Vista より前は、デスクトップと対話するようにサービスを構成できました。これにより、ログインしたユーザーと同じデスクトップでサービスが実行されるため、そのユーザーとして実行されているプログラムは、サービスのウィンドウにメッセージを送信できます。ただし、Windows Vista はサービスを分離します。ユーザーのデスクトップと対話することはできなくなります。
サービスと通信する方法は他にもたくさんあります。これには、名前付きパイプ、メールスロット、メモリ マップ ファイル、セマフォ、イベント、およびソケットが含まれます。
たとえば、ソケットを使用すると、サービスは開いているポートでリッスンでき、それと通信する必要があるプログラムはそのポートに接続できます。これにより、リモート管理への扉が開かれる可能性がありますが、ローカル接続のみをリッスンするようにサービスを制限することもできます.
上記のすべては、あなたが間違ったアプローチを取っていることを伝えようとしています. しかし、目の前の問題の問題もあります。プログラムは、デバッガー内で 1 つの方法で動作し、デバッガー外では別の方法で動作します。インストールされていない場合、そもそもサービスをどのようにデバッグしていますか? サービスを実行しているユーザー アカウントは何ですか? あなたのデバッガ?デバッガーを使用しないで試したデバッグ手法は何writeln
ですか?
Windows Messaging System を「使用する」とはどういう意味ですか? Windows メッセージを使用または送信していますか?
Windows メッセージを送信する場合は、正しく送信していることを確認する必要があります。メッセージが適切にディスパッチされるように、メッセージ ループを作成することをお勧めします。また、メッセージ ループとその仕組みについてもお読みになることをお勧めします。
メッセージ ループとは(タイトルをクリックすると、この情報のソースに移動します)
while(GetMessage(&Msg, NULL, 0, 0) > 0)
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
回答ありがとうございます。問題はオペレーティング システム (vista) でした。Windows 2000 でテストしたところ、すべて動作しました。
軽いロブをありがとう。