摘要:C# - 取得執行檔(EXE)的回傳值
這段時間在做一些測試,主要是透過 A執行檔(EXE) 或者 A批次檔(BAT) 去呼叫一個 B執行檔並傳入相關參數後,B執行檔匯回傳一個數值,讓 A執行檔(EXE) 或者 A批次檔(BAT) 做之後的判斷。
這個議題說難不難,只能說江湖一點訣而已,以下就以範例的方式來呈現吧...
ConsoleApplication2:主要是讓 另外一個執行檔 或 批次檔 呼叫用,並且將傳進來的值回傳回去
Code:
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
if (args.Length > 0)
Environment.Exit(int.Parse(args[0]));
else
Environment.Exit(0);
}
//二擇一使用
//static int Main(string[] args)
//{
// if (args.Length > 0)
// return Convert.ToInt32(args[0]);
// else
// return 0;
//}
}
}
ConsoleApplication1:呼叫 ConsoleApplication2
Code:
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string strExitCode = string.Empty;
ExecuteShellCommand(
@"C:\Users\Administrator\Desktop\TESTFILE\ConsoleApplication1\ConsoleApplication2\bin\Debug\ConsoleApplication2.exe",
"8989889",
ref strExitCode
);
Console.WriteLine("Exit Code:{0}", strExitCode);
Console.ReadKey();
}
public static void ExecuteShellCommand(string _FileToExecute, string _CommandLine, ref string _exitCode)
{
System.Diagnostics.Process P = null;
try
{
P = new System.Diagnostics.Process();
string strCmdProc = string.Format(System.Globalization.CultureInfo.InvariantCulture, @"{0}\cmd.exe", new object[] { Environment.SystemDirectory });
string strArgs = string.Format(System.Globalization.CultureInfo.InvariantCulture, "/C {0}", new object[] { _FileToExecute });
if (_CommandLine != null && _CommandLine.Length > 0)
strArgs += string.Format(System.Globalization.CultureInfo.InvariantCulture, " {0}", new object[] { _CommandLine, System.Globalization.CultureInfo.InvariantCulture });
System.Diagnostics.ProcessStartInfo PI = new System.Diagnostics.ProcessStartInfo(strCmdProc, strArgs);
PI.CreateNoWindow = true;
PI.UseShellExecute = false;
PI.RedirectStandardOutput = true;
PI.RedirectStandardInput = true;
PI.RedirectStandardError = true;
P.StartInfo = PI;
P.Start();
P.WaitForExit();
_exitCode = P.ExitCode.ToString();
}
catch (System.ComponentModel.Win32Exception Ex32)
{
Console.WriteLine("Win32 Exception:{0}", Ex32.ToString());
}
catch (Exception Ex)
{
Console.WriteLine("Exception:{0}", Ex.ToString());
}
finally
{
P.Close();
P.Dispose();
P = null;
}
}
}
}
test.bat:呼叫 ConsoleApplication2,借用 MSDN 的範例
Code:
rem test.bat
@echo off
C:\Users\Administrator\Desktop\TESTFILE\ConsoleApplication1\ConsoleApplication2\bin\Debug\ConsoleApplication2.exe 8989889
@if "%ERRORLEVEL%" == "0" goto good
:fail
echo Execution Failed
echo return value = %ERRORLEVEL%
goto end
:good
echo Execution Succeded
echo return value = %ERRORLEVEL%
goto end
:end
PAUSE
結果一:ConsoleApplication1 呼叫 ConsoleApplication2
結果二:test.bat 呼叫 ConsoleApplication2
參考:
Main() Return Values (C# Programming Guide)
Environment.Exit 方法