2012-12-18 26 views
7

मैंने फ़ंक्शन को सत्यापित करने के लिए एक कंसोल एप्लिकेशन बनाया है और यह एप्लिकेशन मुझे vbscript का उपयोग करके निष्पादित करने की आवश्यकता है। इस exe निष्पादित करने के बाद मैं एक निकास कोड वापस करना चाहता हूँ कि समारोह सफलता वापस या नहीं। मैं .NET में स्थिति या निकास कोड कैसे वापस कर सकता हूं?exe ​​चलाने के बाद निकास कोड कैसे वापस करें?

+0

क्या आप अपना कोड कृपया दिखा सकते हैं? – gideon

+2

मैन्युअल रूप से एक कंसोल डालें। अपने कोड में राइटलाइन करें और प्रक्रिया से मान पढ़ें। मानक आउटपुट या आउटपुटडेटा रीसाइज्ड – Amitd

उत्तर

8

मुझे लगता है कि आप या तो सी # या वीबी.नेट लिख रहे हैं। किसी भी मामले में आम तौर पर लोगों के पास एक मुख्य कार्य होता है जो कुछ भी नहीं देता है, लेकिन आप इसे निकास कोड का प्रतिनिधित्व करने के लिए एक पूर्णांक वापस करने के लिए बदल सकते हैं।

सी # देखें this MSDN page

आप कर सकते हैं:

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

VB.NET के लिए this MSDN page देखते हैं।

आप कर सकते हैं:

Module mainModule 
    Function Main() As Integer 
     '.... 
     '.... 
     Return returnValue 
    End Function 
End Module 
+0

को संभाल लें क्या मैं vbscript का उपयोग करके मुख्य विधि वापसी मान तक पहुंच सकता हूं? – JEMI

+0

@ जेएमआईआई आप सक्षम होना चाहिए। आपको बिल्कुल बता नहीं सकता कि आपके कोड के बिना कैसे। – gideon

+0

यह कोड स्थैतिक int मुख्य (स्ट्रिंग [] तर्क) { var ruleManager = new नियम प्रबंधक(); int स्थिति = ruleManager.ExecuteRule(); वापसी की स्थिति; } – JEMI

0

@gideon के रूप में टिप्पणी की, अपने निष्पादन में आप return बयान संख्या वापस जाने के लिए उपयोग करना चाहिए।

अपनी स्क्रिप्ट में, कृपया इस निष्पादन योग्य को कॉल करने के बाद %ERRORLEVEL% पढ़ें। यही वह स्थान है जहां विंडोज रिटर्न कोड रखता है।

4

इसके अलावा @gideon करने के लिए आप भी

Environment.ExitCode = theExitCode; 

सेट कर सकते हैं अपने कोड और बाहर निकलने के अन्य भागों सीधे अगर कुछ वास्तव में बुरा

0

को देखते हुए इस सी # कार्यक्रम हुआ है में:

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 या .xec
  • का उपयोग कर एक और प्रक्रिया शुरू करते हैं।
  • .Run बुलाया प्रक्रिया
  • .Exec सेट .ExitCode (समाप्ति के बाद!)
  • अपनी स्क्रिप्ट में% errorlevel% तक पहुँचना व्यर्थ है (@LexLi)
  • cscript 13921064.vbs nonum & echo %ERRORLEVEL% बेकार भी है के निकास कोड देता है