- - PR -
Windowフォームのコマンドラインからの起動
投稿者 | 投稿内容 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-03-25 23:02
こんにちは
自分で作成した(VS2005 C#)Windowsアプリケーションをコマンドラインから実行させようと思い、以下の機能を実現させたいと考えています。 @コマンドラインからアプリケーション名と処理したいファイル名を入力する。ファイルがない場合、エラーメッセージをコンソール画面に返すようにしたい。 Aファイルがある場合は、処理を実行する。 以下のプログラムを見ていただきたいのですが、上記の処理がうまくいきません。 static void Main(string[] args) { foreach (string arg in args){ MainForm mf = new MainForm(); bool ex = File.Exists(Application.StartupPath + "¥¥" + arg); if (ex == false){ //指定したファイルが存在しない場合。 Console.WriteLine("File Nothing"); ←エラー1 } else{ //指定したファイルが存在する場合。 mf.Automation(Application.StartupPath + "¥¥" + arg);} ←エラー2 } if (args.Length == 0) { //コマンドライン引数がない場合(通常起動) Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new MainForm()); } } うまくいかないことが2つあります。根本的にわかっていない部分があると感じていますが、どのようにすればよいか手法がわかりません。 エラー1・・・コマンドラインにメッセージを返す処理がうまくいかない。ここをどのように変えたらよいか教えてください。 エラー2・・・ファイルを実行する関数(たとえばAutomation)に処理が遷移しません。どのようにすればいいのか教えてください。 基本的な部分で恐縮ですが、皆さんよろしくお願いします。 | ||||||||||||||||
|
投稿日時: 2006-03-26 01:04
パイプを使います.つまりコマンドプロンプトの方が子プロセスの出力を受け付ける用意をせねばなりません. 「エラー1」という表現をなされていますが,エラーではなく,「何も表示されない」ですよね.「エラー」や「処理がうまくいかない」では曖昧すぎて情報がよく伝わりません.どうなったのかを正確に書くことをお勧めします.
原因は,mf.Automation() をしているだけで,表示しようとしていない,且つ Application.Run() に渡しているのが別のインスタンスだからです. Environment.CommandLine でコマンドライン引数を取得できるので,MainForm 内で Automation を呼び出す方が理解しやすいかもしれませんね. _________________ 囚人@わんくま同盟 囚人のジレンマな日々 [ メッセージ編集済み 編集者: 囚人 編集日時 2006-03-26 01:07 ] | ||||||||||||||||
|
投稿日時: 2006-03-26 01:23
掲載ソースをコピーして実行してみましたが、"File Nothing"は表示されましたよ。 またAutomation(中身は適当に作りましたが)にも遷移自体はするようです。 | ||||||||||||||||
|
投稿日時: 2006-03-26 02:17
多分質問主は「コンソールアプリケーション」として作るのではなくて,「Windows アプリケーション」として作り,それをコマンドラインから起動したいのだと思います. _________________ 囚人のジレンマな日々 | ||||||||||||||||
|
投稿日時: 2006-03-26 09:20
なるほど・・・。 確かに、Windowsアプリケーションって書かれてましたね。 失礼いたしました。 | ||||||||||||||||
|
投稿日時: 2006-03-26 22:21
ありがとうございます。
> パイプを使います.つまりコマンドプロンプトの方が子プロセスの出力を受け付ける用意をせねばなりません. 「エラー1」という表現をなされていますが,エラーではなく,「何も表示されない」ですよね.「エラー」や「処理がうまくいかない」では曖昧すぎて情報がよく伝わりません.どうなったのかを正確に書くことをお勧めします. 指定されたファイルが無い場合、コンソール画面に「ファイルが無いから、終了しますよ」というメッセージを出力したいと思います。 > Environment.CommandLine でコマンドライン引数を取得できるので,MainForm 内で Automation を呼び出す方が理解しやすいかもしれませんね. MainForm内でAutomationを実行することはわかりましたが、 Application.Run(new MainForm()); がソースにあるため、フォームが表示されてしまいます。ここでフォームを表示させず、処理を実行するためにはどのようにしたらよいのでしょうか?? いろいろ質問してすみません。よろしくお願いします。 | ||||||||||||||||
|
投稿日時: 2006-03-27 00:21
なので、パイプなりを使ってコンソールがメッセージを受けたらよいです。
Automation() がどういった処理を行うのかわかりませんが、そういうことならフォームのメソッドにしなければいいだけなのではないでしょうか。 というより、Windows アプリケーションである必要はあるのでしょうか? 何をなさりたいのかイマイチよく分かりません。 _________________ 囚人のジレンマな日々 | ||||||||||||||||
|
投稿日時: 2006-03-27 01:28
特定条件下のみ Windows アプリケーションとして起動させたいのですよね。 でしたら、その条件でない場合は、Application.Run しなければ良いのです。 制御の基本、「分岐」ですね。 それと、良いか悪いかはともかくとして、 Form の自作メソッドを呼び出すだけでは、フォームは表示されないハズです。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 |