- PR -

サービスから複数プロセスを起動する件 (C#)

1
投稿者投稿内容
N
会議室デビュー日: 2006/12/11
投稿数: 2
投稿日時: 2006-12-11 18:01
お世話になります。

現在、各種プログラムを起動するサービスを作成しようとしています。

サービスのOnStart部に以下の処理を記述しました。
コード:
protected override void OnStart(string[] args)
{
  int loop;
  for (loop = 0; loop < 50; loop++)
  {
    Process.Start(@"C:\hoge.exe");
  }
}



上記で呼び出される「hoge.exe」は1時間スリープするだけのプログラムです。
そうしたところ、プログラムの起動数が40個を超えた付近で、hoge.exe内で
「アプリケーションを正しく初期化できませんでした(0xc0000142)。[OK]をクリックしてアプリケーションを終了してください。」

と表示されそれ以降のプログラムの起動に失敗してしまいます。

サービスでなく普通にWindowsフォームのプログラム内で上記の処理を追加した場合は、プロセス数100個でもエラー無しで実行できるのでサービス固有の問題だと思うのですが、エラー無しでちゃんとプログラムを起動する方法はあるでしょうか?

以上、よろしくお願いいたします。

【動作環境】
Windowx Xp Professional SP2
Visual 2005 Team Edition for Software Developers
C# 2005
サービス起動ユーザ LocalSystem
burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2006-12-12 09:38
たしかWindowsサービスのOnStartは30秒以内に処理を完了させないとタイムアウトになったような気がします。
別スレッドを起動して、そこで処理すればいいかと思います。
N
会議室デビュー日: 2006/12/11
投稿数: 2
投稿日時: 2006-12-12 20:09
burton999さま返答ありがとうございます。

引用:

たしかWindowsサービスのOnStartは30秒以内に処理を完了させないとタイムアウトになったような気がします。



残念ながら、プロセスを起動するだけなので、30秒もかかりません。

で、その後、ネット上で色々調べたところ

「アプリケーションを正しく初期化できませんでした(0xc0000142)。[OK]をクリックしてアプリケーションを終了してください。」

というエラーはデスクトップヒープが枯渇した時にでるというのに行きついたためレジストリでデスクトップヒープを増やす事により無事対応できました。

http://interstage.fujitsu.com/jp/technical/trouble/trumwt19017_01.html

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

スキルアップ/キャリアアップ(JOB@IT)