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.修改运行账户模式,设为一个本地内置域账户。

转载于:https://www.cnblogs.com/foreverme/archive/2013/05/06/3063703.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值