none
C# 调用cmd命令 RRS feed

  • 问题

  • 用下面的方法调用cmd命令:

          public static void rar(string fileName)
            {

               Process p = new Process();
                p.StartInfo.FileName = "cmd.exe";
                p.StartInfo.UseShellExecute = false;
                p.StartInfo.RedirectStandardInput = true;
                p.StartInfo.RedirectStandardOutput = true;
                p.StartInfo.RedirectStandardError = true;
                p.StartInfo.CreateNoWindow = true;
                p.Start();
                string strOutput = null;

                p.StandardInput.WriteLine(string.Format("rar x -o+ \"C:\\Documents and Settings\\{0}\" \"C:\\Documents and Settings\\"",fileName));

                p.StandardInput.WriteLine("exit");
                strOutput = p.StandardOutput.ReadToEnd();
                Console.WriteLine(strOutput);
                p.WaitForExit();
                p.Close();

    }

    在Console中调用成功,在web页面中调用失败,没有报错,但是没有生成解压目录。在web页面中如何调用cmd命令行?

     

        谢谢。

    2010年7月12日 7:02

答案

  • 我这里写了一个利用winrar.exe解压的文件,是可以执行的,确保服务器上安装winrar.exe工具

    你再仔细检查下你的方法,

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Diagnostics;
    using System.IO;
    
    public partial class _Default : System.Web.UI.Page 
    {
      protected void Page_Load(object sender, EventArgs e)
      {
    
      }
      protected void Button1_Click(object sender, EventArgs e)
      {
    
        rar(@"d:\1.rar");
      }
      public static void rar(string fileName)
      {
    
      
        
        string sysTempDir = "d:\\";//解压到D盘
       
        string rarFilePath = fileName; //要解压的文件路径
    
        //确定要解压到的目录,是系统临时文件夹下,与原压缩文件同名的目录里
        string unrarDestPath = Path.Combine(sysTempDir,
          Path.GetFileNameWithoutExtension(rarFilePath));
    
        //组合出需要shell的完整格式
        string shellArguments = string.Format("x -o+ \"{0}\" \"{1}\\\"",
          rarFilePath, unrarDestPath);
    
        //用Process调用
        using (Process unrar = new Process())
        {
          unrar.StartInfo.FileName = "Winrar.exe";//
          unrar.StartInfo.Arguments = shellArguments;
          //隐藏rar本身的窗口
          unrar.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
          unrar.Start();
          //等待解压完成
          unrar.WaitForExit();
          unrar.Close();
        }
    
        //统计解压后的目录和文件数
        DirectoryInfo di = new DirectoryInfo(unrarDestPath);
    
        string count = string.Format("解压完成,共解压出:{0}个目录,{1}个文件", di.GetDirectories().Length, di.GetFiles().Length);
    
    
      }
    
    }
    
    

     


    http://blog.csdn.net/zx13525079024
    2010年7月12日 9:46

全部回复

  • 首先你要明天WINFORM和WEB的不同,WINFORM是在本地客户端执行,WEB是在服务器执行,执行的位置及方式不同,

    如果你想在WEB中使用,你可以做一个ACTIVEX插件,嵌入到网页中,在插件中调用CMD命令,这样就可以操作客户端的一些信息


    http://blog.csdn.net/zx13525079024
    2010年7月12日 7:34
  • 我并不是用web接口来调用本地(我指客户端)cmd,而是调用服务器上的cmd。
    2010年7月12日 7:42
  • asp.net 没权限启动进程.
    2010年7月12日 8:13
  • 有办法从aps.net调用cmd吗?
    2010年7月12日 8:15
  • 我这里写了一个利用winrar.exe解压的文件,是可以执行的,确保服务器上安装winrar.exe工具

    你再仔细检查下你的方法,

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Diagnostics;
    using System.IO;
    
    public partial class _Default : System.Web.UI.Page 
    {
      protected void Page_Load(object sender, EventArgs e)
      {
    
      }
      protected void Button1_Click(object sender, EventArgs e)
      {
    
        rar(@"d:\1.rar");
      }
      public static void rar(string fileName)
      {
    
      
        
        string sysTempDir = "d:\\";//解压到D盘
       
        string rarFilePath = fileName; //要解压的文件路径
    
        //确定要解压到的目录,是系统临时文件夹下,与原压缩文件同名的目录里
        string unrarDestPath = Path.Combine(sysTempDir,
          Path.GetFileNameWithoutExtension(rarFilePath));
    
        //组合出需要shell的完整格式
        string shellArguments = string.Format("x -o+ \"{0}\" \"{1}\\\"",
          rarFilePath, unrarDestPath);
    
        //用Process调用
        using (Process unrar = new Process())
        {
          unrar.StartInfo.FileName = "Winrar.exe";//
          unrar.StartInfo.Arguments = shellArguments;
          //隐藏rar本身的窗口
          unrar.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
          unrar.Start();
          //等待解压完成
          unrar.WaitForExit();
          unrar.Close();
        }
    
        //统计解压后的目录和文件数
        DirectoryInfo di = new DirectoryInfo(unrarDestPath);
    
        string count = string.Format("解压完成,共解压出:{0}个目录,{1}个文件", di.GetDirectories().Length, di.GetFiles().Length);
    
    
      }
    
    }
    
    

     


    http://blog.csdn.net/zx13525079024
    2010年7月12日 9:46