0

Windows Server 2003 (および 2008) と C# を使用しています。デスクトップのシステム トレイに問題があります。このアイコン (systray 内) をクリックすると、アプリケーションのフォームが表示されます。

特定の時間にアプリケーションを自動的に実行するタスクをシステム スケジューラに作成しました。アプリケーションが (スケジューラから) 起動されたときにサーバーにログオンすると、デスクトップのシステム トレイにアイコンが表示されます。しかし、サーバーにログオンしておらず、スケジューラがアプリケーションを起動すると、ログオン時にシステムトレイにアイコンが表示されませんが、アプリケーションは完全に動作します。

アプリケーションフォームを表示するさまざまな方法を試しました。たとえば、アプリケーションはファイル内のフラグを読み取り、フラグが true の場合は form.Show() を強制しますが、機能しません。

デスクトップがロードされたときにアプリケーションフォームをエクスプローラー(プロセス)に通知する必要があると思いますが、これを行う方法がわかりません。それは正しい方法ですか?あなたのアドバイスを待っています。

よろしくお願いします

4

2 に答える 2

2

これは、誰もログインしていないときに、アプリケーションを実行するためのデスクトップ セッションがないためだと思います。

アプリケーションは正常に動作する可能性がありますが、後でログインするユーザーの下で実行されていないため、アイコンが表示されません。「バックグラウンドで」別のユーザーとして実行されています。

これは、リモート デスクトップを使用して 2 人のユーザーがログインしている場合と事実上同じです。systray アイコンを作成するアプリケーションを起動できますが、他のユーザーにはそのアイコンは表示されません。

1 つの代替方法は、アプリケーションのロジックを Windows サービスに入れることです。次に、ユーザーがログインしたときに自動実行し、サービスが現在アクティブかどうかを確認し、アイコンとフォームを表示するクライアントを作成します。

于 2010-07-13T14:37:55.027 に答える
1

ログオンしていないときにアプリケーションを起動すると、デスクトップ コンテキストがないため、システム トレイにアイコンを表示するコードは基本的にサイレントに「失敗」します。アイコンのサイトへのメッセージは送信されますが、リッスンするものは何もありません。それら、そしてもちろん、とにかく誰も見ていません。

その後ログオンしてデスクトップ コンテキストを作成すると、アプリは既に実行されており、アイコンを登録するデスクトップが表示されていることを (まだ) 知る方法がありません。起動時にアイコン登録を行い、作業の一部は完了しています。

そのため、デスクトップとシステム トレイにアイコンを配置する準備ができていることをアプリに伝える方法が必要です。その後、アプリはアイコンの登録プロセスを繰り返す必要があります。サービス/クライアントの配置を作成してコア ロジックをプレゼンテーション レイヤーから分離したくない場合は、代わりにスタートアップ グループにアプリを配置して、ログオン時に実行されるようにすることができます。

2 つのコピーを実行したくないので、アプリを微調整してそれ自体の他のインスタンスをチェックし、1 つある場合はそれにフォーカスを切り替えて自分自身を強制終了します。次に、フォーカス ハンドラで、アイコン トレイの登録を無効にしてから再度有効にして、これらのメッセージを再送信します。

于 2010-07-13T14:47:09.760 に答える