控制台cmd,程序输入一段命令之后,要求输入密码。请问能否让程序自动输入,不要人工手动输入。
急,请帮忙!

解决方案 »

  1.   

       ProcessStartInfo start = new ProcessStartInfo("ssh.exe");
       start.Arguments = "[email protected] 'mkdir .sshtest;chmod 0700 .sshtest'\r";//设置命令参数
       start.CreateNoWindow = false;//不显示dos命令行窗口
       start.RedirectStandardOutput = true;//
       start.RedirectStandardInput = true;//
       start.UseShellExecute = false;//是否指定操作系统外壳进程启动程序
       Process p = Process.Start(start);这之后怎么做?程序自动输入密码!
      

  2.   

    ssh.exe 
    要看这个程序怎么传参吧
      

  3.   

    我有个思路,比较麻烦:使用API获取输入框的句柄,模拟键盘输入。
      

  4.   

    上面那段程序执行之后控制台得到的信息:
    input your's password:这个地方我不知道怎么去让程序输入password,然后让它执行。
    ssh没有带密码的参数命令,只有上面一条执行之后,然后再输入密码。
      

  5.   

    这个代码应该简单吧先找到cmd窗口,然后向窗口发键盘按键消息,就行了吧不会找窗口的话 好象在这个BBS,前段时间,看到有你写的c# 扫雷的程序,下来看下
      

  6.   

    [email protected] 'mkdir .sshtest;chmod 0700 .sshtest'\rpassword
    保存为一个文本  在执行 ssh < 保存的文本试试
    ftp可以这么做
      

  7.   

    用p.StandardInput来控制就行了!这是一个streamWriter
      

  8.   


    这个方法我也试了,但还是没有成功。
     StreamWriter sw = p.StandardInput;
     sw.WriteLine("password\r");
      

  9.   

    你的Password就是password么?另外已经是WriteLine了,就不用加回车了!
      

  10.   


    password是正确的,\r去掉的结果是一样的。
      

  11.   

    你去网上找找类似于"一句话下载ftp"之类的看看有没有提示另外你在cmd下多模拟几次试试
      

  12.   

    这是前段时间临时写的一个控制控制台程序的,
    http://topic.csdn.net/u/20091017/01/14ecfe58-80f4-4d1c-87e1-14038f9ddd4b.html其实对于Process类,主要可以控制的就是StreamWriter input = p.StandardInput;
    StreamReader output = p.StandardOutput;
    StreamReader error = p.StandardError;其中作为输出的包括两个,StandardOutput和StandardError,作为输入的只有1个StandardInput
      

  13.   

    另外整个命令控制的过程是异步的,整个一股脑输入进去,当然有问题,需要等到有output返回信息了,
    再输入password才行!
      

  14.   

    恩,是等到界面返回信息,输入password的时候才进行输入的!
      

  15.   

    建议LZ从cmd入手,将ssh作为Input试试!ProcessStartInfo start = new ProcessStartInfo("cmd.exe"); 
      

  16.   


     Process p = new Process();
                    p.StartInfo.FileName = "cmd.exe";
                    p.StartInfo.CreateNoWindow = false;//不显示dos命令行窗口
                    p.StartInfo.RedirectStandardOutput = true;//
                    p.StartInfo.RedirectStandardInput = true;//
                   // p.StartInfo.UseShellExecute = true;
                    p.StandardInput.AutoFlush = true; 
                    
                    StreamWriter sw = p.StandardInput;
                    sw.WriteLine("ssh [email protected] 'mkdir .sshtest;chmod 0700 .sshtest'\r");
                    while (true)
                    {
                        if (p.StandardOutput.ReadLine() == "input your's password:")
                        {
                            sw.WriteLine("password");
                            break;
                        }
                    }这样对么?p.StandardOutput.ReadLine()貌似没得到我要的“input your's password:”,但是控制台上是显示了这句话的。
      

  17.   

    楼主如果不明白,可以搜索一下
    dos  重定向
    或者
    DOS 输入 重定向
      

  18.   

    /// <summary>
            /// 将程序重新启动
            /// </summary>
            /// <param name="appName">程序的名称</param>
            /// <param name="filepath">程序的路径</param>
            /// <param name="admin">管理员名称</param>
            /// <param name="password">管理员密码</param>
            /// <param name="domain">域名称</param>
            /// <returns>是否已经启动</returns>
            public static bool IsReStartApp(string appName,string filepath,string admin,string password,string domain)
            {
                appName = appName.ToUpper();
                if (IsAppExist(appName))
                    return true;
                SecureString ses = new SecureString();
                foreach (char c in password)
                {
                    ses.AppendChar(c);
                }
                Process.Start(filepath, admin, ses, domain);
                return true;
            }
      

  19.   

    不好意思,误导LZ很长时间,类似ftp的exe,是不能够通过重定向输入输出流,控制输入和接收命令的。
    (估计LZ所说的SSH跟这个情况是相同的)LZ可以看看ssh有没有命令行参数支持直接输入用户名和密码,
    或像ftp一样,支持 ftp -s:a.txt(将a.txt里的内容作为input内容),如果还有问题的话,
    试试通过获得窗口句柄,向里面发送键盘消息的方法。