- PR -

Windowフォームのコマンドラインからの起動

投稿者投稿内容
shin2
ベテラン
会議室デビュー日: 2004/03/10
投稿数: 58
投稿日時: 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)に処理が遷移しません。どのようにすればいいのか教えてください。

基本的な部分で恐縮ですが、皆さんよろしくお願いします。
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2006-03-26 01:04
引用:

エラー1・・・コマンドラインにメッセージを返す処理がうまくいかない。ここをどのように変えたらよいか教えてください。


パイプを使います.つまりコマンドプロンプトの方が子プロセスの出力を受け付ける用意をせねばなりません.
「エラー1」という表現をなされていますが,エラーではなく,「何も表示されない」ですよね.「エラー」や「処理がうまくいかない」では曖昧すぎて情報がよく伝わりません.どうなったのかを正確に書くことをお勧めします.

引用:

ファイルを実行する関数(たとえばAutomation)に処理が遷移しません。どのようにすればいいのか教えてください。


コード:


MainForm mf = new MainForm();


コード:


Application.Run(new MainForm());


原因は,mf.Automation() をしているだけで,表示しようとしていない,且つ Application.Run() に渡しているのが別のインスタンスだからです.
Environment.CommandLine でコマンドライン引数を取得できるので,MainForm 内で Automation を呼び出す方が理解しやすいかもしれませんね.


_________________
囚人@わんくま同盟
囚人のジレンマな日々

[ メッセージ編集済み 編集者: 囚人 編集日時 2006-03-26 01:07 ]
minminnana
大ベテラン
会議室デビュー日: 2004/02/05
投稿数: 246
お住まい・勤務地: 盛岡
投稿日時: 2006-03-26 01:23
引用:
エラー1・・・コマンドラインにメッセージを返す処理がうまくいかない。ここをどのように変えたらよいか教えてください。
エラー2・・・ファイルを実行する関数(たとえばAutomation)に処理が遷移しません。どのようにすればいいのか教えてください。


掲載ソースをコピーして実行してみましたが、"File Nothing"は表示されましたよ。
またAutomation(中身は適当に作りましたが)にも遷移自体はするようです。
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2006-03-26 02:17
引用:

掲載ソースをコピーして実行してみましたが、"File Nothing"は表示されましたよ。
またAutomation(中身は適当に作りましたが)にも遷移自体はするようです。


多分質問主は「コンソールアプリケーション」として作るのではなくて,「Windows アプリケーション」として作り,それをコマンドラインから起動したいのだと思います.
_________________
囚人のジレンマな日々
minminnana
大ベテラン
会議室デビュー日: 2004/02/05
投稿数: 246
お住まい・勤務地: 盛岡
投稿日時: 2006-03-26 09:20
引用:
多分質問主は「コンソールアプリケーション」として作るのではなくて,「Windows アプリケーション」として作り,それをコマンドラインから起動したいのだと思います.


なるほど・・・。
確かに、Windowsアプリケーションって書かれてましたね。

失礼いたしました。
shin2
ベテラン
会議室デビュー日: 2004/03/10
投稿数: 58
投稿日時: 2006-03-26 22:21
ありがとうございます。

> パイプを使います.つまりコマンドプロンプトの方が子プロセスの出力を受け付ける用意をせねばなりません.
「エラー1」という表現をなされていますが,エラーではなく,「何も表示されない」ですよね.「エラー」や「処理がうまくいかない」では曖昧すぎて情報がよく伝わりません.どうなったのかを正確に書くことをお勧めします.

指定されたファイルが無い場合、コンソール画面に「ファイルが無いから、終了しますよ」というメッセージを出力したいと思います。

> Environment.CommandLine でコマンドライン引数を取得できるので,MainForm 内で Automation を呼び出す方が理解しやすいかもしれませんね.

MainForm内でAutomationを実行することはわかりましたが、
Application.Run(new MainForm());
がソースにあるため、フォームが表示されてしまいます。ここでフォームを表示させず、処理を実行するためにはどのようにしたらよいのでしょうか??

いろいろ質問してすみません。よろしくお願いします。



囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2006-03-27 00:21
引用:

指定されたファイルが無い場合、コンソール画面に「ファイルが無いから、終了しますよ」というメッセージを出力したいと思います。


なので、パイプなりを使ってコンソールがメッセージを受けたらよいです。

引用:

MainForm内でAutomationを実行することはわかりましたが、
Application.Run(new MainForm());
がソースにあるため、フォームが表示されてしまいます。ここでフォームを表示させず、処理を実行するためにはどのようにしたらよいのでしょうか??


Automation() がどういった処理を行うのかわかりませんが、そういうことならフォームのメソッドにしなければいいだけなのではないでしょうか。
というより、Windows アプリケーションである必要はあるのでしょうか?
何をなさりたいのかイマイチよく分かりません。

_________________
囚人のジレンマな日々
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-03-27 01:28
引用:

shin2さんの書き込み (2006-03-26 22:21) より:

MainForm内でAutomationを実行することはわかりましたが、
Application.Run(new MainForm());
がソースにあるため、フォームが表示されてしまいます。ここでフォームを表示させず、処理を実行するためにはどのようにしたらよいのでしょうか??


特定条件下のみ Windows アプリケーションとして起動させたいのですよね。
でしたら、その条件でない場合は、Application.Run しなければ良いのです。
制御の基本、「分岐」ですね。

それと、良いか悪いかはともかくとして、
Form の自作メソッドを呼び出すだけでは、フォームは表示されないハズです。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌

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