- - PR -
まったく画面が出ないバッチプログラム
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-09-06 19:30
環境は
VS2005 C# 開発OS:WindowsXP 実際の稼動時のOS:Windows Server 2003 です。 現在、別サーバ上のWebサービスとのやり取りを行うバッチプログラムを作成しようとしています。 このバッチは別プロセスからキックされます。 サーバ上で動くオンラインバッチなので一切画面の表示を行いたくありません。 しかし、コンソールアプリケーションでごく簡単なサンプルを作ったところ プロンプト画面が表示されてしまいます。 ・作ったサンプル static int Main(string[] args) { Thread.Sleep(100); return (5); } 一切の画面表示を廃したバッチ処理exeを作成するにはどのような方法が最適なのでしょうか? 考えてみたのは (1)Windowsアプリケーションで作って、Application.Run(New Form1);しないで、別のメソッドをコール? (2)コンソールアプリケーションでつくって、プロンプト画面を表示させない方法がある? (3)その他 でした。 | ||||||||||||
|
投稿日時: 2007-09-06 20:28
なぜWindowsアプリケーションなる言葉が出るのか不明。
空のプロジェクトにクラスを追加してmain書いてそこでバッチ処理を書くでいいんでない? もちバッチ処理は処理単位でメソッド分けするってことでどうよ? | ||||||||||||
|
投稿日時: 2007-09-06 20:31
呼び出し方によって変わってきます。 表示しないように呼び出せばいいだけです。 _________________ | ||||||||||||
|
投稿日時: 2007-09-06 23:01
現在開発環境のないところにいるので、精しく検証しないまま返信します。
>ぶさいくろう さん windowsアプリと考えたのはこれならプロンプトは出ないかもと考えたからです。 exeにビルドするために、Windowsアプリ、コンソールアプリ、クラスライブラリのどれかを 選択しなくてはならないと思っていたのですが違うのでしょうか。 >ちゃっぴ さん サンプルのコンソールアプリexeは、別の.netのWinアプリから System.Diagnostics.Process ps = System.Diagnostics.Process.Start("c:\\abc.exe"); ps.WaitForExit(); の形で暫定的に起動しています。 ただexeを起動しているだけのつもりなのにプロンプトが出てしまうのです。 呼び出し側でのみしか制御できないのでしょうか。 呼び出し側にあまり依存させたくないのです。 | ||||||||||||
|
投稿日時: 2007-09-07 00:25
そもそも別の process で起動する必要ありますか?
無いのであれば、DLL にしてやったほうがはるかにいいでしょう。 自分で作った application から自分で作った exe を呼び出すなんてのは出来るだけ避けたほうがいいです。
Desktop session を持っている user が普通に console application を呼び出せば prompt が表示されます。Desktop session を持っていない user が起動すれば、当然 prompt を表示することが出来ないわけです。 これが Windows の仕様です。 <参考> CreateProcess Process Creation Flags ProcessStartInfo メンバ _________________ | ||||||||||||
|
投稿日時: 2007-09-07 10:15
Process.Startを使うのがいいかどうかは置いといて。
Process.Startを実行する前にProcessStartInfoで設定することでコマンドプロンプトを表示させないようにすることは可能です。 http://codezine.jp/a/article/aid/83.aspx この記事が参考になるかな。 | ||||||||||||
|
投稿日時: 2007-09-07 20:16
皆さんありがとうございます。
私もDLL化したいのはやまやまなのですが、実際の呼び出し側は(別会社の)別パッケージ内に 作られる予定で、Webサービス呼び出しバッチ処理をDLL化したとしてもそれを参照して使用 するのは不可なのだそうです。
System.Diagnostics.Process p = new System.Diagnostics.Process(); p.StartInfo.CreateNoWindow = true; p.StartInfo.FileName = Application.StartupPath + "C:\\abc.exe"; p.Start(); の形でやってみましたが、やはりコンソールが表示されてしまいました・・・。
コマンドプロンプトからビルドするということですか? とりあえず、コンソールアプリのテンプレートで作ったサンプルを、 その後で出力の種類をWindowsアプリケーションに変えてビルド&実行したところ、 ウィンドウは出なくなりました。(前述した(1)に近い方法だと思うのですが。) 問題なさそうならこれで行きたいのですが、良くない方法なのでしょうか。 昔のVB6でいうbasのみのexeみたいにしたいのに、なかなか参考資料が見つけられなくて 困っています。 .netで実現できないのは私が.netやWindowsの仕様の理解度が低いからなのでしょうが・・・。 | ||||||||||||
|
投稿日時: 2007-09-07 21:04
メッセージポンプを動かさなくていいなら、Application.Run をしなければいい。
バッチ実行中は、Windows が終了できなくなる(と思う)。 |