2014年7月17日 星期四

ASP.NET 呼叫CMD執行批次檔BAT

ASP.NET 呼叫CMD執行批次檔BAT

C#:
    private void go()
    {
        try
        {
            // Get the full file path
            string strFilePath = @"C:\inetpub\wwwroot\ga\copyphone.bat";

            // Create the ProcessInfo object
            System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo("cmd.exe");
            psi.UseShellExecute = false;
            psi.RedirectStandardOutput = true;
            psi.RedirectStandardInput = true;
            psi.RedirectStandardError = true;
            psi.WorkingDirectory = @"C:\inetpub\wwwroot\ga\";

            // Start the process
            System.Diagnostics.Process proc = System.Diagnostics.Process.Start(psi);


            // Open the batch file for reading
            System.IO.StreamReader strm = new System.IO.StreamReader(strFilePath, System.Text.Encoding.GetEncoding(950));
            //System.IO.StreamReader strm = System.IO.File.OpenText(strFilePath);
            //strm.CurrentEncoding.GetEncoder = System.Text.Encoding.GetEncoding(950);
            //strm = System.IO.File.OpenText(strFilePath);
            Response.Write(strm.CurrentEncoding.ToString());

            // Attach the output for reading
            System.IO.StreamReader sOut = proc.StandardOutput;

            // Attach the in for writing
            System.IO.StreamWriter sIn = proc.StandardInput;


            // Write each line of the batch file to standard input
            while (strm.Peek() != -1)
            {
                sIn.WriteLine(strm.ReadLine());
            }

            strm.Close();

            // Exit CMD.EXE
            string stEchoFmt = "# {0} run successfully. Exiting";

            sIn.WriteLine(String.Format(stEchoFmt, strFilePath));
            sIn.WriteLine("EXIT");

            // Close the process
            proc.Close();

            // Read the sOut to a string.
            string results = sOut.ReadToEnd().Trim();


            // Close the io Streams;
            sIn.Close();
            sOut.Close();

            string fmtStdOut = "{0}";
            this.Response.Write(String.Format(fmtStdOut,results.Replace(System.Environment.NewLine, "
"))); } catch (Exception ex) { throw ex; } }

沒有留言:

張貼留言