需求:bat文件文件里面写了一个重启某个服务的操作,我之所以不用ServiceController类,是因为不仅仅是控制服务,还有其他功能操作
实现:我在一个页面程序里面调用用Process类来执行这个.bat文件
注意:下面代码是在vs2012运行能实现我的需求,但将程序发布在本地IIS和服务器IIS无效    /// <summary>
    /// 按钮事件
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void btnGetTest_Click(object sender, EventArgs e)
    {
        GetTest();
    }
    private void GetTest()
    {
        if (File.Exists( txtSName.Text.Trim()))
        {
            Process consoleProcess = new Process();            //获取文件路径 比如 c:\PS\app0.bat,   
            string batFilePath = txtSName.Text;            //我想让程序执行这个bat文件,停某个服务,app0.bat文件内容为:net stop appMgmt
            consoleProcess.StartInfo.FileName = batFilePath;
            consoleProcess.StartInfo.UseShellExecute = false;
            consoleProcess.StartInfo.RedirectStandardInput = true;
            consoleProcess.StartInfo.RedirectStandardOutput = true;            consoleProcess.Start();
            StreamReader streamReader = consoleProcess.StandardOutput;
            txtResult.Text = streamReader.ReadToEnd();//输出结果
        }
        else
        {
            txtResult.Text = "文件不存在";
        } 
    }运行效果---------------------------------------
将程序发布在本地IIS和服务器IIS打开页面,就输出bat里面的文本内容,没执行
补充:这就是进程、线程的问题吗?asp.netbatasp.net执行bat

解决方案 »

  1.   

    应该是权限的问题,你vs中开发时,运行web,权限比 iis 中大。你可以在你的bat中设置一下权限
      

  2.   

    创建windows服务可以实现,但asp.net下面就没办法了吗?
      

  3.   

    权限,是我一开始就有设置,IIS不是有个匿名账户嘛,我将匿名账户归类到administrators组中,这个,等于这个匿名账户也是具有超级用户的权限,而且全部控制
      

  4.   

    没有错误什么的吗?
    我估计也是权限问题。
    VS中使用你当前登录用户。IIS6中用的是Network Service. 
    可以在IIS的application pool中设置使用什么用户运行asp.net.或者用impersonate
    <configuration>
      <system.web>
        <identity impersonate="true" userName="accountname" password="password" />
      </system.web>
    </configuration>后者参考:
    在ASP.NET应用程序中使用身份模拟(Impersonation)
    http://www.iwms.net/n810c12.aspx
      

  5.   


    已经在config加入 <identity impersonate="true" userName="accountname" password="password" />
    账号密码是我登录服务器的账号密码,账号密码都是sa而在IIS程序池中我这样设置访问站点的任何文件都会自动停掉程序池
      

  6.   

    已经在config加入 <identity impersonate="true" userName="accountname" password="password" />
    账号密码是我登录服务器的账号密码,账号密码都是sa而在IIS程序池中我这样设置访问站点的任何文件都会自动停掉程序池用一种方法就应该可以了,不需要两种都用。
    impersonate可以了吗?用application pool里面设置账户不行很奇怪啊。看看event view里有什么错误没?
    我们测试服务器访问internet 要通过Proxy并且要认证,都是通过设置application pool用其他账户的。
      

  7.   

    就是因为用了<identity impersonate="true" userName="sa" password="sa" />不行,我才两种方法都用上
    --------------
    谢天谢地谢 findcaiyzh 
    现在,在“应用程序池标示”使用“预定义账户-本地系统”能实现功能了。但是,使用“本地系统”是不是不安全呢?
    在“应用程序池标示”使用“配置”账户,有什么讲究吗?你有没有最简单的范例,我看下,麻烦您了