- - PR -
Windowsアプリケーションのコマンドラインからの起動
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-02-05 00:57
お世話になっております。
既存WindowsAP(VB.NET2005で作成)をコマンドラインからも 起動できるよう改造しようとしています。 既存APはFORMが立ち上がった後「実行ボタン」を押下すると処理が開始し、 処理メッセージをTEXEBOX内に表示します。 これをコマンドラインから起動する場合に、FORM自体を表示せずに処理を開始し、 処理メッセージをDOSプロンプトへ表示させたいと思っています。 そこでMainメソッドを実装し、メッセージ出力部を モードで振分けるようにしました。(下記のコーディング参照) VisualStudio上のデバッグでは上手く動作しているように見えたのですが、 DOSプロンプトで「> APP.exe CMDMODE」と入力して実行すると、 処理メッセージが表示されずに、すぐに次の入力プロンプトが表示されてしまいます。 ただし、タスクマネージャを見ると、APP.exeのプロセスは裏で動いています。 FORMが表示されないだけのAPP.exeを起動している状態のようで、 どこにもメッセージが出力されていません・・・ どのように対処すれば、DOSプロンプトにメッセージが表示されるのでしょうか。 どなたかよろしくお願いします。 Shared Sub Main(ByVal CmdArgs() As String) (引数でコマンドラインモードか判定) 'コマンドラインモードの場合 If cmdMode Then mainForm.mainLogic() 'メイン処理 'WindowsFORMの場合 Else Application.Run(mainForm) 'FORMの表示 End If End Sub 'メッセージ出力関数(モードで出力先振分) Public Sub consoleOut(ByVal msg As String) 'DOSプロンプトへ表示したい → 表示されない・・・ If cmdMode Then Console.WriteLine(msg) Else me.TextBox1.AppendText(msg & VbCrlf) End If End Sub [ メッセージ編集済み 編集者: 赤いんげん 編集日時 2007-02-05 00:59 ] | ||||
|
投稿日時: 2007-02-05 07:24
コマンドプロンプト用のアプリケーションとして作成。
その中で、引数によってウィンドウをだす _________________ | ||||
|
投稿日時: 2007-02-06 00:27
Jitta様
アドバイスどうもありがとうございます。 プロジェクトのプロパティ画面で、「アプリケーションの種類」を「Windows アプリケーション」から「コンソールアプリケーション」へ変更したところ、 DOSプロンプト上に出力することができました。 がしかし、EXEファイルをダブルクリックして起動すると、一度DOSプロンプトが開いて、 その上でメインFORMが表示されるようになりました。(当たり前かもしれませんが。) 黒いDOSプロンプトが残ったまま、WindowsFORMが別画面で開かれています。 ワガママかもしれませんが、あまりカッコイイ起動ではないように思います。 WindowsアプリケーションからDOSプロンプトへ表示する方法、もしくは、 DOSプロンプトからFORMを起動し、その後DOSプロンプトだけを消す方法は ありませんでしょうか。よろしくお願いします。 [ メッセージ編集済み 編集者: 赤いんげん 編集日時 2007-02-06 00:32 ] | ||||
|
投稿日時: 2007-02-06 06:52
いちばん簡単なのはアプリケーションを3つにわけてしまうことですよ。本体となるDLL、コンソールUIとなるEXEファイル、グラフィカルUIとなるEXEファイルに分けるなら、何も難しい事は考えなくてよいよね。
もしひとつの実行ファイルであなたが望んでいることを実現しようとするなら、ランタイムルーチンを書き換える必要があると思う。私だったら絶対やりたくない。 | ||||
|
投稿日時: 2007-02-06 10:00
(私が考える) 1 番簡単な方法は、
これならば、Windows アプリケーションの方の実装は、ほとんどそのままにできるはずです。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2007-02-06 12:14
試したこと無いんですが
[quote]
で、うまいこと標準入出力がつながるもんなんですか? GUI アプリの STDIN, STDOUT は、デフォルトで NULL が入っていたような気がするんですが。。。 | ||||
|
投稿日時: 2007-02-06 14:06
標準入出力に直接つながることは、たぶんないでしょうね。 ("STDIN と STDOUT が NULL" という点は良くわかりませんが) Windows アプリケーションから Write された文字列は、Read すれば、 コンソール アプリケーション側で取得することはできるでしょうけど... ...取得しても、その後コンソールに出力する手立てがないですね。(横取りされるので) やはり、コンソール アプリケーションに参照を追加してロジックを呼び出した方が良いような気がします。orz _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2007-02-06 18:16
こんにちは。
Windows XP以降の環境であれば、 AttachConsole関数が使えるので↓の方法が使えます。 http://q.hatena.ne.jp/1106205741 #以前わたしもWindowsアプリケーションでコンソール出力する プログラムを開発したことありますが、 Windows XPより前で、どうやっていたか忘れてしまいました(-_-;) どっかにソース残ってないかなぁ(独り言) |