我创建了一个用于验证功能的控制台应用程序,并且我需要使用 vbscript 执行该应用程序。执行此 exe 后,无论函数是否返回成功,我都想返回退出代码。如何在 .net 中返回状态或退出代码?
问问题
22895 次
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 回答