Tôi đã tạo một ứng dụng Console để xác thực một hàm và ứng dụng này tôi cần thực thi bằng cách sử dụng vbscript. Sau khi thực hiện lệnh exe này, tôi muốn trả về một mã thoát cho dù hàm có trả về thành công hay không. Làm thế nào tôi có thể trả về một trạng thái hoặc mã thoát trong .net?Làm thế nào để trả lại mã thoát sau khi chạy một exe?
Trả lời
Tôi sẽ giả sử bạn đang viết C# hoặc VB.NET. Trong cả hai trường hợp, mọi người thường có chức năng chính không trả về gì cả, nhưng bạn có thể thay đổi điều này để trả về một số nguyên đại diện cho mã thoát.
Để xem C# this MSDN page.
Bạn có thể làm:
static int Main()
{
//...
return 0;
}
Đối với VB.NET thấy this MSDN page.
Bạn có thể làm:
Module mainModule
Function Main() As Integer
'....
'....
Return returnValue
End Function
End Module
Tôi có thể truy cập giá trị trả về phương thức chính bằng cách sử dụng vbscript không? – JEMI
@JEMI Bạn sẽ có thể. Không thể cho bạn biết chính xác cách thức mà không có mã của bạn. – gideon
đây là mã số static int Main (string [] args) { var ruleManager = new RuleManager(); int status = ruleManager.ExecuteRule(); trạng thái trả lại; } – JEMI
Như @gideon nhận xét, trong thực thi của bạn, bạn phải sử dụng return
tuyên bố trả lại số.
Trong tập lệnh của bạn, vui lòng đọc %ERRORLEVEL%
sau khi gọi tệp thực thi này. Đó là nơi Windows giữ mã trả về.
Ngoài @gideon bạn cũng có thể thiết lập
Environment.ExitCode = theExitCode;
Trong các phần khác của mã và lối ra của bạn trực tiếp nếu có điều gì thực sự tồi tệ đã xảy ra
Với này C# chương trình:
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;
}
}
Chạy mẫu:
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.
và kịch bản VBScript này (giảm đến mức tối thiểu, không làm điều này trong sản xuất):
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
mẫu chạy:
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
Bạn sẽ thấy
- WScript .Quit là cách để trả lại mã thoát từ tập lệnh
- Bạn bắt đầu quá trình khác bằng cách sử dụng .Run hoặc .Exec
- .Run trả về mã lối ra của quá trình được gọi là
- .Exec đặt .ExitCode (sau khi chấm dứt!)
- Tiếp cận% ERRORLEVEL% trong kịch bản của bạn là vô ích (@LexLi)
cscript 13921064.vbs nonum & echo %ERRORLEVEL%
là vô dụng quá
- 1. Làm thế nào để chạy một exe từ dịch vụ windows và ngừng dịch vụ khi quá trình exe thoát?
- 2. Chạy exe sau khi cài đặt msi?
- 3. Nhận Perl để trả lại mã thoát chính xác
- 4. Làm thế nào để chạy một lệnh trước khi một tập lệnh Bash thoát?
- 5. Có @autoreleasepool {} thoát khi trả lại/thoát sớm không?
- 6. Khi chạy R, làm thế nào để thoát khỏi Emacs-ESS một cách duyên dáng?
- 7. Chuỗi Qt không dừng lại sau khi gọi thoát/thoát
- 8. Mã php sẽ thoát sau khi echo cho ajax?
- 9. Làm cách nào để trả lại mã thoát từ ứng dụng bảng điều khiển VBScript
- 10. Làm cho một số mã chỉ chạy sau khi
- 11. Làm thế nào để chạy mã ruby của tôi sau khi máy chủ Rails bắt đầu?
- 12. Làm thế nào để đảm bảo một đoạn mã được chạy trước khi thoát khỏi ứng dụng java
- 13. Làm thế nào để trả lại một fstream (C++ 0x)
- 14. Powershell không trả lại mã thoát thích hợp
- 15. Làm cách nào để chạy mã trước khi thoát chương trình?
- 16. Làm thế nào để hoàn toàn ngừng chạy mã và thoát khỏi ứng dụng?
- 17. Trả lại sau khi ném ngoại lệ
- 18. Hủy trả lại UIScrollView sau khi kéo
- 19. Chạy mã từ mô-đun Python, sửa đổi mô-đun, sau đó chạy lại mà không thoát khỏi interpeter
- 20. Làm thế nào để chạy một exe Không đồng bộ với hai đối số trong ruby?
- 21. Làm thế nào để làm cho mã chạy chỉ khi một ngoại lệ đã được ném?
- 22. Meteor: Làm thế nào để kích hoạt chạy lại chức năng helper sau collectionHandle.ready() là đúng
- 23. Làm thế nào để chạy mã sau khi gọi đến Sytem.exit (0) trong một khối cuối cùng
- 24. Làm thế nào để thực hiện một số mã sau khi một segue được thực hiện?
- 25. Làm thế nào để khởi chạy một EXE từ trang Web (asp.net)
- 26. Làm thế nào để thoát ra khỏi một hàm
- 27. Trong bash, làm cách nào để đặt mã trả lại?
- 28. Làm thế nào để lấy mã trở lại trong Java sau khi thực hiện một dòng lệnh lệnh cửa sổ
- 29. Làm thế nào để thoát khỏi "Sau khi khoảng cách" của tôi trên mở xml
- 30. Thoát try/catch để ngăn chặn mã sau từ được chạy
Bạn có thể hiển thị mã của mình không? – gideon
Đặt bảng điều khiển theo cách thủ công.WriteLine trong mã của bạn và đọc giá trị từ Process.StandardOutput hoặc xử lý OutputDataReceived – Amitd