11

I have created a Console application for validating a function and this application i need to execute by using vbscript. After executing this exe i want to return an exit code whether the function return success or not. How can i return a status or exit code in .net?

4

4 に答える 4

12

C# または VB.NET のいずれかを作成していると仮定します。どちらの場合でも、通常、何も返さない Main 関数がありますが、これを変更して、終了コードを表す整数を返すことができます。

C# については、この MSDN ページを参照してください。

できるよ:

static int Main()
{
    //...
    return 0;
}

VB.NET については、この MSDN ページを参照してください。

できるよ:

Module mainModule
    Function Main() As Integer
        '....
        '....
        Return returnValue
    End Function
End Module
于 2012-12-18T06:03:55.347 に答える
8

@gideon に加えて、設定することもできます

Environment.ExitCode = theExitCode;

コードの他の部分で、何か本当に悪いことが起こった場合は直接終了します

于 2012-12-18T07:17:12.017 に答える
0

@gideon がコメントしたように、実行可能ファイルでは、returnステートメントを使用して数値を返す必要があります。

スクリプトでは、%ERRORLEVEL%この実行可能ファイルを呼び出した後に読んでください。これは、Windows がリターン コードを保持する場所です。

于 2012-12-18T06:53:07.383 に答える
0

この C# プログラムを考えると:

class MainReturnValTest {
    static int Main(string[] args) {
        int rv = 0;
        if (1 == args.Length) {
            try {
                rv = int.Parse(args[0]);
            }
            catch(System.FormatException e)             {
                System.Console.WriteLine("bingo: '{1}' - {0}", e.Message, args[0]);
                rv = 1234;
            }
        }
        System.Console.WriteLine("check returns {0}.", rv);
        return rv;
    }
}

サンプルラン:

check.exe
check returns 0.

check.exe 15
check returns 15.

check.exe nonum
bingo: 'nonum' Input string was not in a correct format.
check returns 1234.

およびこの VBScript スクリプト (最小限に縮小されています。本番環境ではこれを行わないでください):

Option Explicit

Const WshFinished = 1


Dim goWSH : Set goWSH = CreateObject("WScript.Shell")

Dim sCmd : sCmd = "..\cs\check.exe"
If 1 = WScript.Arguments.Count Then sCmd = sCmd & " " & WScript.Arguments(0)
WScript.Echo sCmd
Dim nRet : nRet = goWSH.Run(sCmd, 0, True)
WScript.Echo WScript.ScriptName, "would return", nRet
With goWSH.Exec(sCmd)
    Do Until .Status = WshFinished : Loop
    WScript.Echo "stdout of check.exe ==>" & vbCrLf, .Stdout.ReadAll()
    nRet = .ExitCode
    WScript.Echo ".ExitCode of check.exe", nRet
End With
' !! http://stackoverflow.com/questions/2042558/how-do-i-get-the-errorlevel-variable-set-by-a-command-line-scanner-in-my-c-sha
WScript.Echo "Errorlevel:", Join(Array(goWSH.Environment("PROCESS")("ERRORLEVEL"), goWSH.ExpandEnvironmentStrings("%ERRORLEVEL%"), "???"), " - ")
WScript.Echo WScript.ScriptName, "returns", nRet
WScript.Quit nRet

サンプルラン:

cscript 13921064.vbs
..\cs\check.exe
13921064.vbs would return 0
stdout of check.exe ==>
 check returns 0.

.ExitCode of check.exe 0
Errorlevel:  - %ERRORLEVEL% - ??? <=== surprise, surprise
13921064.vbs returns 0

echo %ERRORLEVEL%
0

cscript 13921064.vbs nonum & echo %ERRORLEVEL%
..\cs\check.exe nonum
13921064.vbs would return 1234
stdout of check.exe ==>
 bingo: 'nonum' Input string was not in a correct format.
check returns 1234.

.ExitCode of check.exe 1234
Errorlevel:  - %ERRORLEVEL% - ???
13921064.vbs returns 1234
0       <=== surprise, surprise

DNV35 E:\trials\SoTrials\answers\13927081\vbs
echo %ERRORLEVEL%
1234

わかるでしょ

  • WScript.Quit は、スクリプトから終了コードを返す方法です
  • .Run または .Exec を使用して別のプロセスを開始する
  • .Run は、呼び出されたプロセスの終了コードを返します
  • .Exec は .ExitCode を設定します (終了後!)
  • スクリプトで %ERRORLEVEL% にアクセスしても無駄です (@LexLi)
  • cscript 13921064.vbs nonum & echo %ERRORLEVEL%も駄目です
于 2012-12-18T09:31:16.840 に答える