- PR -

Widowsアプリケーションをバッチファイルとして使用した場合の終了コード取得方法

1
投稿者投稿内容
yamayama
ベテラン
会議室デビュー日: 2006/02/10
投稿数: 68
投稿日時: 2006-03-01 09:36
 VB.NET初心者なのですが、終了コード取得について困っております。
プロジェクトをWidowsアプリケーションで作成しており、

 何もせずに起動した場合はフォームが立ち上がり、
 引数を与えて起動した場合はバッチファイルとして処理

を行うようにしています。

 この時、バッチファイルとして動作した場合
終了コードを返す必要にせまられています。、
 @ITや書籍には、コンソールアプリケーションの場合の
終了コードを返す方法が書かれていますが、
Windowsアプリケーションの場合の方法が判りません。

 どなたかWidowsアプリケーションをバッチファイルとして使用した場合の
終了コード取得方法を伝授いただけないでしょうか?
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-03-01 10:51
引用:

yamachanさんの書き込み (2006-03-01 09:36) より:

@ITや書籍には、コンソールアプリケーションの場合の
終了コードを返す方法が書かれていますが、
Windowsアプリケーションの場合の方法が判りません。


一緒だと思いますが...
Main エントリ ポイントで終了コードを return で返すだけですよね。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
yamayama
ベテラン
会議室デビュー日: 2006/02/10
投稿数: 68
投稿日時: 2006-03-01 11:20
 下記のコードを、Windowsアプリケーションとコンソールアプリケーション
(プロジェクトメニュのプロジェクトプロパティの全般項目の出力の種類で変更)
で作成した場合、
コンソールアプリケーションの場合は終了コードを取得できましたが、
Windowsアプリケーションでは終了コードを取得できませんでした。

何か別の方法があるのでしょうか?
または取得方法が違うのでしょうか?

▼コード
==============================================================
Function main() As Integer
Dim vbCommand As String = ""
Try
vbCommand = Microsoft.VisualBasic.Command
If vbCommand = "" Then
Return -1
Else
Return -10
End If
Catch ex As Exception
Return -99
End Try
End Function
==============================================================

コマンドプロンプトにより実行した場合の例
▼結果
==============================================================
C:\a>testCmd.exe s ←Windowsアプリケーション

C:\a>echo %errorlevel%
0


C:\a>testCmd2.exe s ←コンソールアプリケーション

C:\a>echo %errorlevel%
-10
==============================================================

以上の結果になります。
何かよい方法はないでしょうか。
takacini
常連さん
会議室デビュー日: 2005/12/27
投稿数: 24
お住まい・勤務地: 東京都
投稿日時: 2006-03-01 11:41
引用:

コンソールアプリケーションの場合は終了コードを取得できましたが、
Windowsアプリケーションでは終了コードを取得できませんでした。



Windowsアプリケーションのプロジェクトの、「スタートアップの設定」がフォームになっていませんか??
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-03-01 11:43
引用:

yamachanさんの書き込み (2006-03-01 11:20) より:

以上の結果になります。


そうはならないと思いますが...
ステップ実行して確認してみてください。
本当に期待した Return ステートメントが実行されていますか?

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
YuO
会議室デビュー日: 2005/11/14
投稿数: 11
投稿日時: 2006-03-01 12:14
引用:

yamachanさんの書き込み (2006-03-01 11:20) より:
コンソールアプリケーションの場合は終了コードを取得できましたが、
Windowsアプリケーションでは終了コードを取得できませんでした。



Windowsアプリケーションの場合,CMD.EXEはプログラムの終了を待たないため,終了コードを取得できていないのでしょう。
START /WAITを使って,Windowsアプリケーションが終了するのを待たせる必要があります。
yamayama
ベテラン
会議室デビュー日: 2006/02/10
投稿数: 68
投稿日時: 2006-03-01 15:11
いろいろとお世話をおかけいたしまして、無事解決できました。
YuOさんのおっしゃる通りCMD.exeでは期待した結果を得る事ができないため、
コンソールアプリケーションからWindowsアプリケーションの戻り値を取得し、
CMD.exeで起動を行った結果、じゃんぬさんのおっしゃる通り、Windowsアプリケーションでも戻り値を返却いたしておりました。
ありがとうございました。
又、機会がありましたらよろしくお願いします。
1

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