C#如何显示执行命令行程序

时间:2022-09-02 20:41:46
B/S的,在按钮事件中,通过代码打开一个命令窗口,执行一个命令行程序,在弹出的命令窗口中显示执行的命令结果,执行完后窗口不退出。

程序是在本地的,不是在服务器上。

25 个解决方案

#1


可能说的不太清楚 
举个例子

本地有个命令行程序nt.exe 可输入参数
点击按钮
CMD窗口显示所有用户列表

#2


命令行运行完不退出可以用 cmd /k 你的命令

用process.start调用。

#3


引用 2 楼  的回复:
命令行运行完不退出可以用 cmd /k 你的命令

用process.start调用。


我试试

#4


引用 2 楼  的回复:
命令行运行完不退出可以用 cmd /k 你的命令

用process.start调用。


这个路径怎么写?程序在D盘根目录 调试时可以执行 但通过IE直接访问网站不能执行

#5


引用 2 楼  的回复:
命令行运行完不退出可以用 cmd /k 你的命令

用process.start调用。


调试时可以 但还有问题
1.程序执行完后没返回到程序所在路径
2.用IE直接访问 程序能执行 但窗口不能弹出 权限的问题?

#6


没权限,要么在客户机上装个软件,要么换个解决方案

#7


通过IE直接访问网站,当然不行。那会在一个系统进程中执行,而不是当前用户下,所以桌面上看不到的。

#8


事实上,更不允许通过服务器访问本地的程序。否则就乱套了。

搞一个病毒网站那就太容易了——只要你访问我的网站,我就执行你客户端上的format c:,那多恐怖。

#9


引用 6 楼  的回复:
没权限,要么在客户机上装个软件,要么换个解决方案

权限怎么改?要用什么软件?先不想换方案

#10


引用 8 楼  的回复:
事实上,更不允许通过服务器访问本地的程序。否则就乱套了。

搞一个病毒网站那就太容易了——只要你访问我的网站,我就执行你客户端上的format c:,那多恐怖。


自己局域网上用 安全先不用考虑

#11


我是说,根本办不到,因为标准的浏览器不管你是在哪里用,都是不支持你这么做的——事实上你的代码只能在服务器上运行。

除非你在本地部署一个客户端控件。

#12


BS的执行本地CMD,可以用JS或者VBS
C#代码是在服务端执行的,你现在可以执行可能是因为是在本地测试,服务端和客户端都是同一台机器

#13


IE默认的安全级别下是干不了这活的

#14


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;

namespace StudentMain_Killer
{    /// 
    /// DOS命令输出类
    /// 
    public class CommandDo
    {
        /**/
        /// 
        /// 执行DOS命令,返回DOS命令的输出
        /// 
        /// dos命令
        /// 返回输出,如果发生异常,返回空字符串
        public static string Execute(string dosCommand)
        {
            return Execute(dosCommand, 6 * 1000);
        }
        /**/
        /// 
        /// 执行DOS命令,返回DOS命令的输出
        /// 
        /// dos命令
        /// 等待命令执行的时间(单位:毫秒),如果设定为0,则无限等待
        /// 返回输出,如果发生异常,返回空字符串
        public static string Execute(string dosCommand, int milliseconds)
        {
            string output = "";     //输出字符串
            if (dosCommand != null && dosCommand != "")
            {
                Process process = new Process();     //创建进程对象
                ProcessStartInfo startInfo = new ProcessStartInfo();
                startInfo.FileName = "cmd.exe";      //设定需要执行的命令
                startInfo.Arguments = "/C " + dosCommand;   //设定参数,其中的“/C”表示执行完命令后马上退出
                startInfo.UseShellExecute = false;     //不使用系统外壳程序启动
                startInfo.RedirectStandardInput = false;   //不重定向输入
                startInfo.RedirectStandardOutput = true;   //重定向输出
                startInfo.CreateNoWindow = true;     //不创建窗口
                process.StartInfo = startInfo;
                try
                {
                    if (process.Start())       //开始进程
                    {
                        if (milliseconds == 0)
                            process.WaitForExit();     //这里无限等待进程结束
                        else
                            process.WaitForExit(milliseconds);  //这里等待进程结束,等待时间为指定的毫秒
                        output = process.StandardOutput.ReadToEnd();//读取进程的输出
                    }
                }
                catch
                {
                }
                finally
                {
                    if (process != null)
                        process.Close();
                }
            }
            return output;
        }
    }

}

#15


我晕  ,一时没注意写成小写了
楼主将就着看吧。

#16


首先分析一下,你是B/S结构,所有代码都是在服务端运行的啊,服务器只返回解析完成的HTML。
所以写服务端代码是不行的。

要想在客户端执行只能用脚本语言:比如JS,vbs等。。。

<script language="javascript" type="text/javascript">
       var myshell = new ActiveXObject( "WScript.shell" );
       myshell.Run( 'ipconfig', 1, true );      
 </script>   


这种方式要求支持ActiveX

#17


 startInfo.FileName = "cmd.exe";   
 startInfo.Arguments = "/K " + dosCommand;  

#18


引用 16 楼  的回复:
首先分析一下,你是B/S结构,所有代码都是在服务端运行的啊,服务器只返回解析完成的HTML。
所以写服务端代码是不行的。

要想在客户端执行只能用脚本语言:比如JS,vbs等。。。

JScript code

<script language="javascript" type="text/javascript">
       var myshell = new ActiveX……


这个方法可以 但窗口弹出来就没了

#19


<script language="javascript" type="text/javascript">
       var myshell = new ActiveXObject( "WScript.shell" );
       myshell.Run( 'cmd /k ipconfig', 1, true );      
 </script> 

#20


引用 19 楼  的回复:
<script language="javascript" type="text/javascript">
  var myshell = new ActiveXObject( "WScript.shell" );
  myshell.Run( 'cmd /k ipconfig', 1, true );  
 </script>


程序结束后的路径为什么不是命令行程序所在的路径呢?怎么改成程序所在的路径?谢谢!

#21


上面的问题还没解决
又有新的问题了
想用按钮执行JS里的方法 但没反应
<script language="javascript" type="text/javascript">
function open(){
var myshell = new ActiveXObject( "WScript.shell" );
myshell.Run( 'cmd /k ipconfig', 1, true ); 
}
</script>

<input name="op" type="button" onclick="open()" value="打开程序" />

或者用Button事件后台执行
ClientScript.RegisterStartupScript(ClientScript.GetType(), "myscript", "<script>open();</script>");

但都没反应 怎么回事?谢谢

#22


该回复于2012-10-13 09:53:23被版主删除

#23


用Button事件后台执行
前台:
<asp:Button ID="Button1" runat="server" Text="打开程序" onclick="Button1_Click" />
后台:
ClientScript.RegisterStartupScript(ClientScript.GetType(), "myscript", "<script>open();</script>",true);

没反应

#24


引用 16 楼  的回复:
首先分析一下,你是B/S结构,所有代码都是在服务端运行的啊,服务器只返回解析完成的HTML。
所以写服务端代码是不行的。

要想在客户端执行只能用脚本语言:比如JS,vbs等。。。

JScript code

<script language="javascript" type="text/javascript">
       var myshell = new ActiveX……


程序结束后的路径为什么不是命令行程序所在的路径呢?怎么改成程序所在的路径?谢谢!

#25


现在可以执行本地程序了 但还有些问题 

感谢caozhy和haukwong,学到不少东西,谢谢。
结帖吧!
 

#1


可能说的不太清楚 
举个例子

本地有个命令行程序nt.exe 可输入参数
点击按钮
CMD窗口显示所有用户列表

#2


命令行运行完不退出可以用 cmd /k 你的命令

用process.start调用。

#3


引用 2 楼  的回复:
命令行运行完不退出可以用 cmd /k 你的命令

用process.start调用。


我试试

#4


引用 2 楼  的回复:
命令行运行完不退出可以用 cmd /k 你的命令

用process.start调用。


这个路径怎么写?程序在D盘根目录 调试时可以执行 但通过IE直接访问网站不能执行

#5


引用 2 楼  的回复:
命令行运行完不退出可以用 cmd /k 你的命令

用process.start调用。


调试时可以 但还有问题
1.程序执行完后没返回到程序所在路径
2.用IE直接访问 程序能执行 但窗口不能弹出 权限的问题?

#6


没权限,要么在客户机上装个软件,要么换个解决方案

#7


通过IE直接访问网站,当然不行。那会在一个系统进程中执行,而不是当前用户下,所以桌面上看不到的。

#8


事实上,更不允许通过服务器访问本地的程序。否则就乱套了。

搞一个病毒网站那就太容易了——只要你访问我的网站,我就执行你客户端上的format c:,那多恐怖。

#9


引用 6 楼  的回复:
没权限,要么在客户机上装个软件,要么换个解决方案

权限怎么改?要用什么软件?先不想换方案

#10


引用 8 楼  的回复:
事实上,更不允许通过服务器访问本地的程序。否则就乱套了。

搞一个病毒网站那就太容易了——只要你访问我的网站,我就执行你客户端上的format c:,那多恐怖。


自己局域网上用 安全先不用考虑

#11


我是说,根本办不到,因为标准的浏览器不管你是在哪里用,都是不支持你这么做的——事实上你的代码只能在服务器上运行。

除非你在本地部署一个客户端控件。

#12


BS的执行本地CMD,可以用JS或者VBS
C#代码是在服务端执行的,你现在可以执行可能是因为是在本地测试,服务端和客户端都是同一台机器

#13


IE默认的安全级别下是干不了这活的

#14


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;

namespace StudentMain_Killer
{    /// 
    /// DOS命令输出类
    /// 
    public class CommandDo
    {
        /**/
        /// 
        /// 执行DOS命令,返回DOS命令的输出
        /// 
        /// dos命令
        /// 返回输出,如果发生异常,返回空字符串
        public static string Execute(string dosCommand)
        {
            return Execute(dosCommand, 6 * 1000);
        }
        /**/
        /// 
        /// 执行DOS命令,返回DOS命令的输出
        /// 
        /// dos命令
        /// 等待命令执行的时间(单位:毫秒),如果设定为0,则无限等待
        /// 返回输出,如果发生异常,返回空字符串
        public static string Execute(string dosCommand, int milliseconds)
        {
            string output = "";     //输出字符串
            if (dosCommand != null && dosCommand != "")
            {
                Process process = new Process();     //创建进程对象
                ProcessStartInfo startInfo = new ProcessStartInfo();
                startInfo.FileName = "cmd.exe";      //设定需要执行的命令
                startInfo.Arguments = "/C " + dosCommand;   //设定参数,其中的“/C”表示执行完命令后马上退出
                startInfo.UseShellExecute = false;     //不使用系统外壳程序启动
                startInfo.RedirectStandardInput = false;   //不重定向输入
                startInfo.RedirectStandardOutput = true;   //重定向输出
                startInfo.CreateNoWindow = true;     //不创建窗口
                process.StartInfo = startInfo;
                try
                {
                    if (process.Start())       //开始进程
                    {
                        if (milliseconds == 0)
                            process.WaitForExit();     //这里无限等待进程结束
                        else
                            process.WaitForExit(milliseconds);  //这里等待进程结束,等待时间为指定的毫秒
                        output = process.StandardOutput.ReadToEnd();//读取进程的输出
                    }
                }
                catch
                {
                }
                finally
                {
                    if (process != null)
                        process.Close();
                }
            }
            return output;
        }
    }

}

#15


我晕  ,一时没注意写成小写了
楼主将就着看吧。

#16


首先分析一下,你是B/S结构,所有代码都是在服务端运行的啊,服务器只返回解析完成的HTML。
所以写服务端代码是不行的。

要想在客户端执行只能用脚本语言:比如JS,vbs等。。。

<script language="javascript" type="text/javascript">
       var myshell = new ActiveXObject( "WScript.shell" );
       myshell.Run( 'ipconfig', 1, true );      
 </script>   


这种方式要求支持ActiveX

#17


 startInfo.FileName = "cmd.exe";   
 startInfo.Arguments = "/K " + dosCommand;  

#18


引用 16 楼  的回复:
首先分析一下,你是B/S结构,所有代码都是在服务端运行的啊,服务器只返回解析完成的HTML。
所以写服务端代码是不行的。

要想在客户端执行只能用脚本语言:比如JS,vbs等。。。

JScript code

<script language="javascript" type="text/javascript">
       var myshell = new ActiveX……


这个方法可以 但窗口弹出来就没了

#19


<script language="javascript" type="text/javascript">
       var myshell = new ActiveXObject( "WScript.shell" );
       myshell.Run( 'cmd /k ipconfig', 1, true );      
 </script> 

#20


引用 19 楼  的回复:
<script language="javascript" type="text/javascript">
  var myshell = new ActiveXObject( "WScript.shell" );
  myshell.Run( 'cmd /k ipconfig', 1, true );  
 </script>


程序结束后的路径为什么不是命令行程序所在的路径呢?怎么改成程序所在的路径?谢谢!

#21


上面的问题还没解决
又有新的问题了
想用按钮执行JS里的方法 但没反应
<script language="javascript" type="text/javascript">
function open(){
var myshell = new ActiveXObject( "WScript.shell" );
myshell.Run( 'cmd /k ipconfig', 1, true ); 
}
</script>

<input name="op" type="button" onclick="open()" value="打开程序" />

或者用Button事件后台执行
ClientScript.RegisterStartupScript(ClientScript.GetType(), "myscript", "<script>open();</script>");

但都没反应 怎么回事?谢谢

#22


该回复于2012-10-13 09:53:23被版主删除

#23


用Button事件后台执行
前台:
<asp:Button ID="Button1" runat="server" Text="打开程序" onclick="Button1_Click" />
后台:
ClientScript.RegisterStartupScript(ClientScript.GetType(), "myscript", "<script>open();</script>",true);

没反应

#24


引用 16 楼  的回复:
首先分析一下,你是B/S结构,所有代码都是在服务端运行的啊,服务器只返回解析完成的HTML。
所以写服务端代码是不行的。

要想在客户端执行只能用脚本语言:比如JS,vbs等。。。

JScript code

<script language="javascript" type="text/javascript">
       var myshell = new ActiveX……


程序结束后的路径为什么不是命令行程序所在的路径呢?怎么改成程序所在的路径?谢谢!

#25


现在可以执行本地程序了 但还有些问题 

感谢caozhy和haukwong,学到不少东西,谢谢。
结帖吧!