2011-07-01 7 views
2

私はいくつかのサードパーティのアプリケーションを使用するWindowsサービスを持っています。このアプリケーションはログイン用に単一のウィンドウから構築され、ログイン後にプロセスがバックグラウンドで実行され、誰も気にしません。Windowsサービスから外部プロセスを実行しています

(Processクラスを使用して)このアプリケーションを開くコードがあり、必要なフィールドをすべて入力して接続ボタンを押します。このコードは、コマンドラインやフォームから勝利するときにはうまく動作しますが、Windowsサービスからこのコードを実行するとエラーは発生せず、exeも実行されません。

これはちょっと奇妙に聞こえると思いますが、Windowsサービスは設計上UIフリーでなければなりませんが、サービスを開始する前にこのアプリケーションを昼食する必要があります。この作業を2段階外部のすべてとサービスを開始する。

サービスプロパティの[ログオン]タブから[デスクトップと対話するサービスを許可する]チェックボックスをオンにしましたが、これは何もしませんでした。

どのようにこの作品を作るか、あるいはこの問題のための別のデザインでは、私は1ステップで操作を行うことができます。

ありがとうございました。

+0

エラーが表示されますか。またはイベントログにエラーメッセージが記録されますか? –

+1

これが役立つかどうかは不明ですが、SYSTEMまたはNETWORK SERVICEの代わりに実際のログオン/ユーザーアカウントでサービスを実行してみることができます – Jay

+0

プロセスはどのようにボタンに当たったのですか?いくつかのコードを表示する必要があります。正確に結果があなたの期待に合わない箇所を確認するために、段階的にデバッグを試みましたか? –

答えて

1

これはおそらくあなたを助けるかもしれませんか? http://blogs.msdn.com/b/winsdk/archive/2009/07/14/launching-an-interactive-process-from-windows-service-in-windows-vista-and-later.aspx

Windows SDK用ですが、そこでメソッドを実行するにはPInvokeを使用する必要があることに注意してください。私は特定の条件にフォームを表示するのに必要なWindowsサービスを前に、同様の問題を持っていたが、時間のほとんどは、単にバックグラウンドでアイドル状態How to start a process from windows service into currently logged in user's session

+0

OPは、サービスの前にインタラクティブアプリが開始されたことを実際に手配するよう依頼しました。私はそれが初心者ではないと思うが、答えは異なる問題、すなわちサービスからインタラクティブなアプリを始めることになる。 –

+1

私はそれが彼が意味するものだとは思わない。サービスを開始する前にアプリを起動する必要があります。つまり、サービスを開始すると、アプリを起動してから実際に必要な作業を行うことができます。 –

+0

それはそれかもしれませんが、もしそうなら、なぜサービスを起動してアプリを起動するのが難しいのでしょうか? 'HKLM \ Software \ Windows \ CurrentVersion \ Run'などで起動してください。 –

0

はまた、この関連の質問を参照してください。

あなたの要件はわかりませんが、私はメインフォームのないフォームアプリケーションとして作成しました。

スタートアップ時にプログラムを起動することでこれをカップルすると、かなりうまく動作します。

基本的に

[STAThread] 
    static void Main(string[] args) 
    { 
     // Launch your stuff in a separate thread like you would in the Service Start method.  

     Application.Run();  
    } 

と、それはそれです。それが役に立てば幸い。

+0

私は彼がフォームを表示するだけでなく、別の*プロセス*を立ち上げることについて語っていると思います。このプロセスは、.NETアプリケーションではない可能性があります。 –

+0

真ですが、サービスとして実行していない場合は、新しいプロセスを生成する問題があります。 – IronicMuffin

1

あなたの期待を再調整する必要があります。システムの起動時にサービスを自動的に起動します。ユーザーのログイン時にアプリを起動します(例:HKLM\Software\Windows\CurrentVersion\Run)。サービスがアプリの前で開始されることに耐えられるように調整します。また、サービスが停止しても(クラッシュなど)、再起動されてもサービスが維持されることを確認してください。

なぜこれをすべて言いますか?さて、サービスは、接続されている対話ユーザーがいない場合でも、常に実行されるように意図されています。そうであれば、サービスが始まる前にインタラクティブアプリが実行されているとは思えません。

関連する問題