2011-01-13 9 views
0

私はフォアグラウンドで実行するように書かれたプログラムを持っています。しかし、それはいくつかのマシンでの背景となりますいくつかのマシンでWindowsプロセスの背景自体

ここに文脈があります。次のように

私は、デバッグ目的のために

public class MyService: ServiceBase 

をServiceBaseから派生したクラスを持って、私はサービスを開始していない次のように

ServiceBase.Run(myService); 

は代わりに、私は直接のOnStartを呼び出します、そして永遠に眠る:

myService.OnStart(null); 
System.Threading.Thread.Sleep(System.Threading.Timeout.Infinite); 

somプロセスが本番マシン上に戻ってくる理由。アイデア?

+0

この場合、「背景」の意味を定義できますか? –

+0

DOSシェルはコマンドプロンプトに戻り、プログラムをバックグラウンドで実行します。 – Ziffusion

+0

あなた自身の質問に答えた場合は、それを回答として投稿し、それを受け入れるべきです。他人が行う前に自分の問題を理解することに間違いはありません。 –

答えて

1

VSはサービスプロジェクトのOutputTypeをWinExeに設定するためです(コンソールアプリケーションの場合はExeとは対照的です)。 WinExeの実行ファイルは、バックグラウンドで動作します。そして、2つのマシンで動作が異なるように見えました。なぜなら、私はCygwinシェルにいたからです。なぜなら、何らかの理由でそれ自身をバックグラウンドにしていないからです。

+1

あなたは[私の質問はここ]に興味があるかもしれません(http://stackoverflow.com/questions/4028353/where-do-writes-to-stdout-go-when-launched-from-a-cygwin-shell-no-リダイレクション)は、コンソールから起動されたことを検出します(win32 cmd.exeとcygwinと他のアプリケーションとの比較)。 –

0

私はWindowsが実際にあなたのアプリケーションを実行している「メイン」スレッドの状態に注意を払うか、注意を払うことができると思います。 'メイン'スレッドがスリープしていることがわかると、IIRCはプロセス全体をバックグラウンドにすることができます。いつ、何をバックグラウンドにするかは、ラップトップなどの省エネルギー機能に関係します。

+0

これについて参考になっていますか? – Ziffusion

関連する問題