zoukankan      html  css  js  c++  java
  • iis7中运行cmd

    ASP.NET 使用一个process启动一个cmd.exe 执行command,vs 调试模式下运行成功,但发布到IIS7上就启动不了cmd

    0        
                     悬赏园豆:50                 [已解决问题]              浏览: 174次        

    我为了实现一个HPC批处理,ASP.NET 使用一个process启动一个cmd.exe 执行command,vs 调试运行成功,但发布到IIS7上就启动不了cmd.exe。

    显示的状况是,我等待的时间很长时间,调用cmd.exe 的process一直没有执行command,而且也没有抛出异常;

    我把process.StartInfo.CreateNoWindows设为了false。正常情况下是应该弹出一个黑屏,但IIS下这个黑屏也没有弹出。在vs中调试是可以弹出来的。

    请问这个哪位遇到过这样的情况,请帮助。感激不尽

    iis 下process调用cmd.exe失败            
    cctext的主页                                  cctext                 |                 初学一级                 |                 园豆:156 提问于:2012-11-07 16:40            
     
    <             >                  找优秀程序员,就在博客园        
    收藏                                      
    最佳答案
    0                

    没权限吧

                        收获园豆:20                
    向往-SONG                         |                         老鸟四级                         |园豆:4369                         |                        2012-11-07 16:44                

    1.但我试着去修改 了cmd.exe权限 甚至给了它 everyone,同时把它给考配到了~/bin/cmd。exe

    2.直接通过路径调用 process.FileName=HttpContext.Current.Server.MapPath("~/bin/cmd.exe") 也不可以;

    3.修改了machine.config <processModel userName="my comp login account" password="my comp login password" enable="true"/> 也不可以。

    我使用的是 IIS7

    cctext                                     |                                     园豆:156                                     (初学一级)                                     |                                     2012-11-07 17:00                                

    @cctext: 

    试试:

    [DllImport("shell32.dll ")]
            public static extern int ShellExecute(IntPtr hwnd, StringBuilder lpszOp, StringBuilder lpszFile, StringBuilder lpszParams, StringBuilder lpszDir, int FsShowCmd);

    调用:

    ShellExecute(IntPtr.Zero, new StringBuilder("Open"), new StringBuilder("要执行程序的名称"), new StringBuilder("参数"), new StringBuilder("要执行程序的目录"), 1);

    并设置权限。

    向往-SONG                                     |                                     园豆:4369                                     (老鸟四级)                                     |                                     2012-11-07 17:15                                

    @向往-SONG: 这种call api (c++ dll)在iis上是正常运行的,

    但你这里的ShellExecute() 或这个接口的用法还是值得借鉴的,我之前也是这个封成一个.exe(调用cmd.exe执行批处理),使用process去调用这个。exe,也没有成功,也可能是我当时程序调式过程中出现的有问题。

    看看有人能帮忙把这个iis问题解决不,如果是在没有办法,我就试试这个。

    cctext                                     |                                     园豆:156                                     (初学一级)                                     |                                     2012-11-07 17:20                                

    @cctext: 我之前也是 去调c++ dll的接口时,直接使用 调这个extern 修饰的方法,不能直接执行,需要一个c# console Env封装一个。exe,之后再在代码使用process去调这个C#。exe,很费解。

    类似的问题,你遇到过没有?还好我通过process调用。exe是成功的。

    cctext                                     |                                     园豆:156                                     (初学一级)                                     |                                     2012-11-07 17:26                                

    @cctext: 

    我现在项目里就是刚那样用的,直接调用不用封装什么的没问题。

    不过我是去执行一个winform的程序。

    向往-SONG                                     |                                     园豆:4369                                     (老鸟四级)                                     |                                     2012-11-07 17:30                                

    @向往-SONG: winform 和webform是执行还不一样。

    cctext                                     |                                     园豆:156                                     (初学一级)                                     |                                     2012-11-07 17:44                                

    @cctext: 

    是web的,我是说要调用执行的程序是个winform程序。

    向往-SONG                                     |                                     园豆:4369                                     (老鸟四级)                                     |                                     2012-11-07 17:48                                

    @向往-SONG: en  webform也可以 调用extern修饰的 接口方法的。

    cctext                                     |                                     园豆:156                                     (初学一级)                                     |                                     2012-11-07 17:52                                
        
    其他回答(3)        
    0                    

    和我遇到的问题类似啊,我前几天刚发布的解决方案

    http://www.cnblogs.com/tianlin/archive/2012/10/26/2741813.html

    收获园豆:15                                
    田林九村                             |                             园豆:2020                             (老鸟四级)                             |                             2012-11-07 16:48                        

    首先你要弄明白,我在vs中调试是可以正常运行的,成功执行 HPC 批处理(通过asp.net process 成功调用了CMD.EXE并成功执行了调用批处理命令)

    我之后把它发布在IIS上后不可以执行的,这个不是我的process.StartInfo.WorkDirectory 指定的路径不对的问题。

    cctext                                             |                                             园豆:156                                             (初学一级)                                             |                                             2012-11-07 17:04                                    

    @cctext: 嗯,受教了

    田林九村                                             |                                             园豆:2020                                             (老鸟四级)                                             |                                             2012-11-07 17:25                                    

    @cctext: 我发布IIS后没有遇到你说的问题。

    可借助别的方法检查,比如记日志,将你怀疑出问题的地方都用日志记下来,当然不一定能发现问题,不过可以试试

    田林九村                                             |                                             园豆:2020                                             (老鸟四级)                                             |                                             2012-11-07 17:32                                    

    @向往-SONG: 这个时候 他不抛出错误,只是一直卡机,如果会过一段时间 process 会自动回收掉了。

    cctext                                             |                                             园豆:156                                             (初学一级)                                             |                                             2012-11-07 17:45                                    
    0                    

    这种方式的运行真的太扯淡了啊,能换一个思路吗?为何老是要web程序去运行exe文件什么的

                                        收获园豆:15                                
    chenping2008                             |                             园豆:8033                             (大侠五级)                             |                             2012-11-07 17:05                        

    cmd.exe 去执行的是一个.PS1(hpc 批处理命令),是需要的动态的参数地,执行一个 HPC 批处理,你可以通过C#代码实现吗?

    cctext                                             |                                             园豆:156                                             (初学一级)                                             |                                             2012-11-07 17:07                                    

    @cctext: 这种运行cmd.exe的方式是在什么样子的情况下触发的?

    chenping2008                                             |                                             园豆:8033                                             (大侠五级)                                             |                                             2012-11-07 17:11                                    

    @chenping2008: 

    Process process=new Process();

    process.FileName=HttpContext.Current.Server.MapPath("~/bin/cmd.exe");

    process.StartInfo......

    ....

    if(process.Start())

    {

        // doo

    }

    else

    {

      throw new Exception("Error:start process call cmd.exe failed!");

    }

    cctext                                             |                                             园豆:156                                             (初学一级)                                             |                                             2012-11-07 17:14                                    
    0                    

    这个问题 最终还是从IIS的权限上我找到了问题的解决办法,

    默认IIS Pool中的 模式是Network Service内置账户权限,这个权限不够大。

    1.提升Network Service内置账户的权限;

    2.修改运行账户模式,设为一个本地内置域账户。

  • 相关阅读:
    C#的编码规范中文版(www.idesign.net Author: Juval Lowy)
    [经典推荐]事半功倍系列之javascript(二)
    [推荐]让SQL跑得更快
    SortedList 用法
    在C#中应用哈希表(Hashtable)
    SVN配置安装
    sql事务处理回滚及保留点transaction,ROLLBACK
    启用Service Broker
    BLOB
    WebServiceBinding属性
  • 原文地址:https://www.cnblogs.com/foreverme/p/3063703.html
Copyright © 2011-2022 走看看