2009-05-11 5 views
0

Windows VistaでNTサーバアプリケーションをバックグラウンドで実行していて、サーバが特定のコマンドを受信したときにNotepad.exeを実行したいが、動作しないshellexec、winexec、createprocess関数で試行したが、すべて失敗している。メモ帳は常にサーバーのデスクトップ上で実行され、Vistaはそれを切り替えるように頼むメッセージを表示します。正しく起動する方法はありますか?NTサーバのUIで別のAPを呼び出す

答えて

0

Vista Session 0 isolationのためです。サービスはターミナルサービスセッション0で実行されており、ユーザーはセッション1以上にログオンしており、2人の相互作用は厳密に制限されています。

正式にサポートされている方法は、ヘルパーアプリケーションを既にユーザーのデスクトップで実行し、IPC(パイプ、ソケットなど)を介してサービスに連絡することです。次に、サービスがユーザーのデスクトップとやりとりしたいときに、ヘルパーアプリケーションにあなたのためにそれを行うように要求します。

+0

UACの問題のため、私はNTサーバにそれを避けたいと思います。それは、NTサーバが完全な管理者の許可を必要としないようにするために、APを意味します。ヘルパーアプリケーションが既にユーザーデスクトップ上で実行されている場合は、依然としてUACダイアログを表示する必要があります。 –

+0

これはUACの要点です。あなたのアプリケーションに昇格された特権が必要な場合は、ユーザーに許可を求める必要があります。 Vistaはあなたが達成しようとしているものを正確に許可しないように設計されています。私は不可能ではないとは言いませんが、マルウェアコミュニティには回避策がありますが、正当な開発者ならばUACまたはセッション0の分離を克服する必要がないように設計を再考してください。 – snowcrash09

0

CreateProcessを、STARTUPINFOのメンバーのlpDesktopメンバーで開くデスクトップの名前で呼び出そうとしましたか? hereを参照してください。

+0

はい、試しましたが、それでも動作しません。 –

関連する問題