プロが教える店舗&オフィスのセキュリティ対策術

batからexeを実行し戻り値を受け取る

EXEの実行内容の結果によって、戻り値を0か1かで返したいのですが、下記のバッチを実行したところ、
実行結果関係なく、EXEが実行できたら0を返すようなコードになってしまいました。
どこを直せば良いかご指摘お願いします。
EXEはVB6.0です。


【バッチ】
@ehco off

Project.exe
echo %errorlevel%

↓↓↓project.exe

【フォーム】
private sub form_load()
'ファイルの存在を確認する
Dim fso As FileSystemObject
Set fso = New FileSystemObject
'ファイルの存在を確認する
If fso.FileExists("C:\Hoge.txt") Then
Call MsgBox("ファイルはあります")
Else
Call MsgBox("ファイルはありません")
End If

【標準モジュール】
Public Declare Sub ExitProcess Lib "kernel32"(ByVal uExitCode As Long)
Public Sub Main()

Dim filePath As String
filePath = Split(Command)(0)

Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")

If fso.FileExists(filePath) Then
ExitProcess 0
Else
ExitProcess -1
End If
End Sub

A 回答 (1件)

> EXEはVB6.0です。



この環境は無いけど、OSに付属してるコンパイラ、
C:\Windows\Microsoft.NET\Framework\v4.0.30319\vbc.exe
で、

-----tt.bat-----
@echo off
Test.exe
echo %errorlevel%

-----Test.vb-----
Public Module Test
Public Declare Sub ExitProcess Lib "kernel32"(ByVal uExitCode As Long)
Public Sub Main()
Console.WriteLine("Test")
ExitProcess(2)
End Sub
End Module

だと、きちんと2とか指定の数字が返ってきた。

--
> 実行結果関係なく、EXEが実行できたら0を返すようなコードになってしまいました。

ifの判定に失敗してるって事もあるのでは。
何もせずに数値を返すプログラムで、ExitProcessが機能しているか確認とか。
ExitProcess 0/-1それぞれの前にメッセージボックスか何かで、filepathの文字列とか、どっちに分岐したのかの処理状況表示するとか。

あるいは、実はエラー出てるのに気づかずに、前回作成したexeを繰り返し実行してるとか。
打ち間違いだと思うけど、@echo offが@ehco offになってるし。
その他、ウィルス対策ソフトが作成されたexeを掴むせいで、2回目コンパイルしてもexeを上書きできずにエラーになるような事もあるし。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
if文確認してみます。

お礼日時:2023/07/05 06:52

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A