ASP.NET调用cmd命令提示符拒绝访问解决方案

  using System.Diagnostics;
public class CmdHelper{private static string CmdPath = @"C:\Windows\System32\cmd.exe";/// <summary>/// 执行cmd命令/// 多命令请使用批处理命令连接符:/// <![CDATA[
        /// &:同时执行两个命令/// |:将上一个命令的输出,作为下一个命令的输入/// &&:当&&前的命令成功时,才执行&&后的命令/// ||:当||前的命令失败时,才执行||后的命令]]>/// 其他请百度/// </summary>/// <param name="cmd"></param>/// <param name="output"></param>public static void RunCmd(string cmd, out string output){cmd = cmd.Trim().TrimEnd('&') + "&exit";//说明:不管命令是否成功均执行exit命令,否则当调用ReadToEnd()方法时,会处于假死状态using (Process p = new Process()){p.StartInfo.FileName = CmdPath;p.StartInfo.UseShellExecute = false;        //是否使用操作系统shell启动p.StartInfo.RedirectStandardInput = true;   //接受来自调用程序的输入信息p.StartInfo.RedirectStandardOutput = true;  //由调用程序获取输出信息p.StartInfo.RedirectStandardError = true;   //重定向标准错误输出p.StartInfo.CreateNoWindow = true;          //不显示程序窗口p.Start();//启动程序//向cmd窗口写入命令
                p.StandardInput.WriteLine(cmd);p.StandardInput.AutoFlush = true;//获取cmd窗口的输出信息output = p.StandardOutput.ReadToEnd();p.WaitForExit();//等待程序执行完退出进程
                p.Close();}}}

 


使用示例

示例1:显示ipconfig信息
string cmd =@"ipconfig/all";

示例2:打开VS2010命令提示      
string cmd =@"C:&cd C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC&vcvarsall.bat";

示例3:使用sn.exe工具产生密钥对并显示          
string cmd =@"C:&cd C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC&vcvarsall.bat&sn -k d:\LicBase.snk&sn -p d:\LicBase.snk d:\LicBasePubKey.snk&sn -tp d:\LicBasePubKey.snk";

调用
string output = "";
CmdHelper.RunCmd(cmd, out output);
MessageBox.Show(output);

 

======================

最近做关于Windows Server POP3服务器的小项目,翻遍网络,也没能找到接口。

   值得庆幸的是最终发现了一个控制台接口winpop.exe,也就是用cmd命令提示符与POP3服务器交互。

    这样实属无奈之举,用cmd命令效率低不说,而且获取、分析返回信息相当麻烦。然而这还不算什么,最主要的是:B/S模式下,网页程序有权限调用cmd吗?
   这里调用cmd,当然不是调用客户机器上的cmd,而是服务器上的cmd,这样心里还有点底。

   小心翼翼的在我电脑上做了实验,成功在aspx页面中调用cmd,并执行了ping命令,而且顺利获取、分析返回信息。

   于是我满怀信心的把测试程序发布到了服务器上,也是顺利执行!核心代码如下:

using System.Diagnostics;  
using System.IO;  /// <summary>  
/// cmd命令执行助手类  
/// </summary>  
public class CMDHelper  
{  private Process p = null;  private StreamReader reader = null;  /// <summary>  /// 通过cmd执行ping命令  /// </summary>  /// <param name="cmdString">命令内容</param>  /// <returns>命令执行结果</returns>  public string execute(string cmdString)   {  ProcessStartInfo start = new ProcessStartInfo("cmd.exe");  start.FileName = "ping";  start.Arguments = cmdString;  start.CreateNoWindow = true;  start.RedirectStandardOutput = true;  start.RedirectStandardInput = true;  start.UseShellExecute = false;  start.WorkingDirectory = "C:\\WINDOWS\\system32";  p = Process.Start(start);  reader = p.StandardOutput;  string line = "";  string lineTemp = "";   //逐行读出返回的数据,并做一定处理,方便解析  while (!reader.EndOfStream)  {  lineTemp = reader.ReadLine();//读出一行  //将空行用*号表示  if (lineTemp == "")  {  line += "*";  }  else  {  line += lineTemp;  }  }  return line;  }  
}  

       可是高兴的太早了,当我把start.FileName= "ping";改成start.FileName = "winpop";,也就是执行winpop命令,这时候无情的返回了“拒绝访问”。

         分析一下,是什么拒绝访问了?刚刚已经成功执行了ping,说明访问cmd的权限是有的,执行的ping命令实际上是利用cmd.exe调用了ping.exe,这说明访问ping.exe的权限也是有的。而现在换成winpop命令,却出现了拒绝访问,说明我们没有权限访问winpop.exe!

         这下该怎么办呢?首先想到的就是修改winpop.exe的访问权限,右击winpop.exe(在Windows/System32文件夹下),点击【属性】---【安全】选项卡,在用户中加入当前用户,还是拒绝;加入ASP.NET用户,还是拒绝;最后急了,加上Everyone用户,依然拒绝!看来这种方法没有作用。

         再冷静的分析一下,这肯定是权限问题引起的。那么这个权限究竟在哪限制了?

别忘了,我们的程序是运行在IIS中的,所有的生杀大权,都由IIS掌握,权限是不是在这里呢?

         果断google一下,IIS还真有权限,更确切的说,是IIS中的“应用程序池”可以设置权限。接下来就说说如何设置。

         先从IIS中找到你的网站,在右键--【属性】中看看使用的应用程序池是哪个,然后【在应用程序池】目录下找到它,右键---【属性】

 

         找到【标识】选项卡,再找到【预定义账户】,在后边的下拉菜单中选择“本地系统”就可以了!

 

         这样一来,你的网站就可以随心所欲的执行cmd命令了,其实不仅仅是执行cmd命令,简直是至高无上的权限!

         提醒一下,这样更改的是应用程序池权限,因此所有使用这个应用程序池的网站都有很高的权限,这是相当危险的,还须谨慎使用!!

         作为完整的解决方案,还需要提一点。

         调用cmd执行命令时,可以指定用户(用户是指系统用户,也就是登录电脑时用的帐号密码),这样也可以获得一定的权限。代码如下:

using System.Diagnostics;  
using System.IO;  /// <summary>  
/// cmd命令执行助手类  
/// </summary>  
public class CMDHelper  
{  private Process p = null;  private StreamReader reader = null;  /// <summary>  /// 通过cmd执行ping命令  /// </summary>  /// <param name="cmdString">命令内容</param>  /// <returns>命令执行结果</returns>  public string execute(string cmdString)   {  ProcessStartInfo start = new ProcessStartInfo("cmd.exe");  start.FileName = "ping";  start.Arguments = cmdString;  start.CreateNoWindow = true;  start.RedirectStandardOutput = true;  start.RedirectStandardInput = true;  start.UseShellExecute = false;  start.WorkingDirectory = "C:\\WINDOWS\\system32";  start.UserName = "administrator"; //指定用户  //构造用户密码,假定密码为123,必须一个字符一个字符的添加  System.Security.SecureString password = new System.Security.SecureString();  password.AppendChar('1');  password.AppendChar('2');  password.AppendChar('3');  start.Password = password;  p = Process.Start(start);  reader = p.StandardOutput;  string line = "";  string lineTemp = "";   //逐行读出返回的数据,并做一定处理,方便解析  while (!reader.EndOfStream)  {  lineTemp = reader.ReadLine();//读出一行  //将空行用*号表示  if (lineTemp == "")  {  line += "*";  }  else  {  line += lineTemp;  }  }  return line;  }  
}  

   但是本人在Windows Server2003下测试失败,只要指定用户,网页程序就挂起,直到响应超时,原因未知。

 

转载于:https://www.cnblogs.com/hnsongbiao/p/7440034.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/369507.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java 7:Fork / Join框架示例

Java 7中的Fork / Join Framework专为可分解为较小任务的工作而设计&#xff0c;并将这些任务的结果组合起来以产生最终结果。 通常&#xff0c;使用Fork / Join Framework的类遵循以下简单算法&#xff1a; // pseudocode Result solve(Problem problem) {if (problem.size &…

php上传文件 服务器内部错误,php – 在将图像上传到S3时遇到内部服务器错误500...

在将图像上传到S3时我遇到了一个问题.我正在使用S3类和jqueryimageuploader插件.我已经设置了基本的应用程序,它在我的本地机器上运行良好.当我在beanstalk上部署它时,它开始抛出错误.我已经附加了控制台快照.我在这里添加我的代码供参考.这是启动文件index.html –gt;Meta cha…

Some reading, some thinking.

update&#xff1a;感谢助教0 0又学会一招&#xff0c;play 了一下CSS Part 1 Reading AuthorArticleNoteMadcola《两年波折路&#xff08;考研、工作、考研&#xff09;》"吾志所向&#xff0c;一往无前&#xff1b;愈挫愈奋&#xff0c;再接再励。"辜新星《时刻调…

CSS选择器:伪类(图文详解)

本文最初发表于博客园&#xff0c;并在GitHub上持续更新前端的系列文章。欢迎在GitHub上关注我&#xff0c;一起入门和进阶前端。 以下是正文。 伪类&#xff08;伪类选择器&#xff09; 伪类&#xff1a;同一个标签&#xff0c;根据其不同的种状态&#xff0c;有不同的样式。…

了解播放过滤器API

随着Play 2.1的热销&#xff0c;很多人开始询问新的Play过滤器API。 实际上&#xff0c;API非常简单&#xff1a; trait EssentialFilter {def apply(next: EssentialAction): EssentialAction }本质上&#xff0c;过滤器只是一个执行一个动作并返回另一个动作的函数。 过滤器…

mybatis 使用merge into

前一篇博客&#xff0c;oracle的merge into语法 &#xff1a; oracle merge into语法 mybatis 使用merge into&#xff0c;跟一般的update写法相同&#xff1a; <update id"mergeinfo">merge into user_type ausing ( select #{name} as name, #{type} as type…

php getbyid,ThinkPHP查询中的魔术方法简述

我们在使用thinkphp开发的时候&#xff0c;有时候会用到getById(1)这个方法快速的获取一条信息的内容&#xff0c;这个方法比用where(" id 1 ")->find()好用多了&#xff0c;同时查询效率也比find快速。很多人在刚开始接触这个方法的时候&#xff0c;没有多留意它…

DIV固定宽度和动态拉伸混合水平排列

1.效果图 2.源代码 html <h2>1.头部固定&#xff0c;尾部拉伸</h2> <div class"container" id"div1"><div class"head"></div><div class"tail"></div> </div><h2>2.尾部固定…

bzoj1941 [Sdoi2010]Hide and Seek

Description 小猪iPig在PKU刚上完了无聊的猪性代数课&#xff0c;天资聪慧的iPig被这门对他来说无比简单的课弄得非常寂寞&#xff0c;为了消除寂寞感&#xff0c;他决定和他的好朋友giPi&#xff08;鸡皮&#xff09;玩一个更加寂寞的游戏—捉迷藏。 但是&#xff0c;他们觉得…

ubuntu修改ssh服务的端口号

一、找到ssh配置文件位置 vim /etc/ssh/sshd_config 二、修改ssh登录端口号 修改 port 22 为 port xxxx 三、重启ssh服务 /etc/init.d/ssh restart转载于:https://www.cnblogs.com/javafucker/p/8521316.html

使用CSS设置JavaFX饼图样式

渲染图表时&#xff0c; JavaFX默认提供某些颜色。 但是&#xff0c;在某些情况下&#xff0c;您想自定义这些颜色。 在此博客文章中&#xff0c;我将使用一个示例来更改JavaFX饼图的颜色&#xff0c;该示例打算在今天下午在RMOUG Training Days 2013的演示中包括。一些基于Jav…

python列表去重效率,你应该知道的python列表去重方法

前言列表去重是写Python脚本时常遇问题&#xff0c;因为不管源数据来自哪里&#xff0c;当我们转换成列表的方式时&#xff0c;有可能预期的结果不是我们最终的结果&#xff0c;最常见的就是列表中元素有重复&#xff0c;这时候第一件事我们就要做去重处理。我们先来个最简单的…

java 错误: 找不到或无法加载主类

这个问题应该很常见的&#xff0c;笔者经常手工编译一些测试代码或者小工具&#xff0c;经常用到 javac和java来编译并运行一些简单的小工具。 以Hello World来测试。 HelloWorld.java public class HelloWorld{public static void main(String[]args){System.out.println(&quo…

HTML 表单 存为EXCEL文件时 中文显示乱码

在做宣传品发放系统时&#xff0c;需求要把数据库查询的记录生成表单并转存excel文件。 在转存的EXCEL文件中文显示乱码&#xff0c;表格和其他字符正常&#xff0c;检查后发现是创建EXCEL文件打开模式不对 之前&#xff1a; myfile fs.CreateTextFile(filename,true) 之后…

在Visual Studio Code中配置GO开发环境

一、GO语言安装 详情查看&#xff1a;GO语言下载、安装、配置 二、GoLang插件介绍 对于Visual Studio Code开发工具&#xff0c;有一款优秀的GoLang插件&#xff0c;它的主页为&#xff1a;https://github.com/microsoft/vscode-go 这款插件的特性包括&#xff1a; Colorizatio…

最受欢迎的应用服务器

这是本系列的第二篇文章&#xff0c;我们将发布有关Java安装的统计数据。 使用的数据集来自免费的Plumbr安装&#xff0c;在过去六个月中&#xff0c;我们总共收集了1,024个不同的环境。 本系列的第一篇文章分析了基础-运行JVM的操作系统&#xff0c;是32位还是62位基础架构以…

SON_EXAM考试php,通用全国少儿英语等级考试:三星笔试真题

单项选择&#xff1a;36. exciting the game was! I enjoyed every minute of it.A.What B. How C.What an B.How an37.You stay here if youve finished your work.A.neednt B.mustnt C. shouldnt D.cant38 Nanjing Road in Shanghai is always crowded peole.A.with B.by c.o…

JS一些碎知识点

一些js基本知识点 Doctype 浏览器渲染模式 渲染模式发展历史在多年以前&#xff08;IE6诞生以前&#xff09;&#xff0c;各浏览器都处于各自比较封闭的发展中&#xff08;基本没有兼容性可谈&#xff09;。随着WEB的发展&#xff0c;兼容性问题的解决越来越显得迫切&#xff0…

CSS基础知识(display和visibility、overflow、文档流)

9、显示与隐藏 u display属性&#xff1a; (1)none&#xff1a;隐藏元素&#xff0c;不会再占有页面的任何空间&#xff0c;即不会影响布局。 (2)inline&#xff1a;默认值。将元素[显示]为内联元素 &#xff08;与HTML元素本身无关系&#xff09; (3)block&#xff1a…

浏览器滚动条样式更改

/* webkit内核浏览器 */::-webkit-scrollbar { width: 8px; }::-webkit-scrollbar-button { width: 8px; height: 5px; }::-webkit-scrollbar-track { background-color: #ddd; border-radius: 0px; }::-webkit-scrollbar-thumb { background: #999; border-radius: 0px; }::-w…