首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • C#调用cmd执行命令重新启动应用程序池,但无法运行cscript.exe [已结贴,结贴人:cjq003]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • cjq003
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    • 揭帖率:
    发表于:2008-08-08 17:41:36 楼主
    代码如下:
    C# code
    Process p = new Process(); p.StartInfo.FileName = "cmd.exe"; // 这里是关键点,不用Shell启动/重定向输入/重定向输出/不显示窗口 p.StartInfo.UseShellExecute = false; p.StartInfo.RedirectStandardInput = true; p.StartInfo.RedirectStandardOutput = true; p.StartInfo.RedirectStandardError = true; p.StartInfo.CreateNoWindow = true; p.StartInfo.WorkingDirectory = "f:\\f"; string command = "cscript.exe"; p.StartInfo.Arguments = "c:\\windows\\system32\\iisapp.vbs /a \"DefaultAppPool\" " + command; p.Start(); //p.StandardInput.WriteLine("cscript.exe c:\\windows\\system32\\iisapp.vbs /a \"DefaultAppPool\""); //p.StandardInput.WriteLine("exit"); //p.WaitForExit(60000); string s = p.StandardOutput.ReadToEnd();// 得到cmd.exe的输出 p.Close();


    请多多指教!
    150  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • cjq003
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-08 17:43:021楼 得分:0
    问题如题。谢谢!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • HW_zxc_004
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-09 09:55:542楼 得分:1
    up
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • tylike
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-18 17:55:043楼 得分:2
    1、试试把你要执行的写个批处理文件再调用一下。
    2、运行cmd /? 看看有哪些参数,应该会有帮助。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • Macosx
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-21 12:09:224楼 得分:2
    有什么错误
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • LQknife
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-21 13:06:305楼 得分:1
    帮 顶
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • cjq003
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-21 13:59:186楼 得分:0
    那位有进一步的见解?请不吝赐教!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • cjq003
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-21 14:22:217楼 得分:0
    引用 4 楼 Macosx 的回复:
    有什么错误


    没提示什么错误,就是并没有重新启动应用程序池。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • adam_xiu
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-21 17:31:518楼 得分:1

    C# code
    p.WaitForExit(); if (p.HasExited) { string s = p.StandardOutput.ReadToEnd(); }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • cjq003
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-21 18:23:069楼 得分:0
    引用 8 楼 adam_xiu 的回复:

    C# codep.WaitForExit();if(p.HasExited)
            {strings=p.StandardOutput.ReadToEnd();
            }


    用了这段代码,结果点击按钮执行后,窗口就死在那边了!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • wdgphc
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-21 19:47:1810楼 得分:0
    为什么是 p.StartInfo.Arguments = "c:\\windows\\system32\\iisapp.vbs /a \"DefaultAppPool\" " + command;   
    而 不是  p.StartInfo.Arguments = command + " c:\\windows\\system32\\iisapp.vbs /a \"DefaultAppPool\" ;
       

    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • cjq003
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-22 09:40:1611楼 得分:0
    奇怪,怎么 cscript.exe c:\windows\system32\iisapp.vbs /a "DefaultAppPool"
    这条命令并不能重新启动应用程序池!  WINDOWS SERVER 2003 SP2
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • cjq003
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-22 10:24:4112楼 得分:0
    有人知道WINDOWS SERVER 2003 SP2下,该用什么命令重新启动IIS应用程序池吗?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • whycom
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-22 11:41:4313楼 得分:2
    权限够吗?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • LuckyMouse_ZJU
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-22 11:47:5614楼 得分:0
    引用 10 楼 wdgphc 的回复:
    为什么是 p.StartInfo.Arguments = "c:\\windows\\system32\\iisapp.vbs /a \"DefaultAppPool\" " + command;   
    而 不是  p.StartInfo.Arguments = command + " c:\\windows\\system32\\iisapp.vbs /a \"DefaultAppPool\" ;
       


    同问
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • cjq003
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-22 11:50:5015楼 得分:0
    引用 13 楼 whycom 的回复:
    权限够吗?




    权限? 如何赋予权限呢?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • wdgphc
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-22 17:01:4616楼 得分:1
    (1)你的程序池名对吗? DefaultAppPool
    (2)你在2003 sp1下正常而在sp2下 报什么错?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • wdgphc
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-22 17:14:5717楼 得分:3
    以前用的,SP2下不知能不能用

    set WebAppPool = GetObject("IIS://LocalHost/w3svc/AppPools/DefaultAppPool")
    WebAppPool.Stop
    WebAppPool.Start

    上面代码保存为VBS脚本文件即可.再用cscript.exe调用一下试试.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • cjq003
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-22 18:13:2818楼 得分:0
    在2003 sp1下没试过。
    没报错,就是没有重起重新启动IIS应用程序池。
    程序池名是对的。

    set WebAppPool = GetObject("IIS://LocalHost/w3svc/AppPools/DefaultAppPool")
    WebAppPool.Stop
    WebAppPool.Start

    上面代码保存为VBS脚本文件即可.再用cscript.exe调用一下试试.

    以上代码是直接在命令提示符下运行还是在 c#代码中运行?估计写在c#中运行也不行吧?权限问题!
    有时间再试。。。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • cjq003
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-25 11:27:5619楼 得分:0
    权限问题到底怎么解决啊?  上次有试过.NET的权限类,感觉不好用!不起作用!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • luyuans86
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-25 17:27:1520楼 得分:1
    up
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • vwxyzh
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-26 11:00:5721楼 得分:1
    如果在aspnet里面的话,估计是权限问题
    把这个相关的网页放到另一个有管理员权限的apppool里面(用localsystem比较方便)
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • cjq003
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-26 11:09:0222楼 得分:0
    好象不是权限问题,把cscript.exe c:\windows\system32\iisapp.vbs /a "DefaultAppPool"放在命令行里直接执行也不能重起应用程序池,
    放在计划任务里设了管理员密码执行也不能重起应用程序池。
    谁知道怎么回事啊?指点一下!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zhzuo
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-27 21:43:3723楼 得分:106
    两个问题
    1.楼主确认你的那段命名是否能够重新启动应用程序池。
    关于cmd的调用可以参考这里,
    使用C#调用外部Ping命令获取网络连接情况
    http://blog.csdn.net/zhzuo/archive/2004/03/21/22024.aspx
    2.执行该命令的权限是否足够,可以参考这里。
    在.NET代码中模拟特定Windows用户
    http://blog.csdn.net/zhzuo/archive/2007/07/18/1698056.aspx

    如果可以也可以尝试重新启动IIS来实现。
    调用iisreset.exe可以很容做到。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • cjq003
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-28 09:01:1424楼 得分:0
    感谢楼上的,但是到底cscript.exe c:\windows\system32\iisapp.vbs /a "DefaultAppPool"能不能重起应用程序池呢?
    毕竟重新启动IIS动作太大。。。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • downmoon
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-28 09:38:2425楼 得分:20
    应该是找不到cscript文件路径
    试试这个
    BatchFile code
    echo off if exist "%SystemRoot%\Microsoft.NET\Framework\v2.0.50727" goto netOld :DispError echo 您的机器上没有安装 .net FrameWork 2.0 pause goto LastEnd :netOld cd %SystemRoot%\Microsoft.NET\Framework\v2.0.50727 echo 您的机器上安装了相应的.net FrameWork,可以运行本脚本,按任意键继续………… echo off pause %SystemRoot%\System32\Cscript %SystemRoot%\System32\iisapp.vbs /a "DefaultAppPool" :LastEnd rem exit


    另外, 可以参考这个
    http://www.microsoft.com/china/technet/community/columns/insider/iisi1104.mspx
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • cjq003
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-28 10:01:4126楼 得分:0
    在命令提示符下执行楼上的代码和我自己的代码均返回:
    The following W3WP.exe processes are serving AppPool: "DefaultAppPool"
    W3WP.exe PID:5656
    这样子到底有没有重起应用程序池呢?好象没有!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • TLJewel
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-28 14:19:4027楼 得分:1
    学习一下
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • gisfarmer
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-28 16:31:1128楼 得分:2
    都是牛人啊。我只好闭嘴了。
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    解决了吧?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • cjq003
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-29 08:06:2829楼 得分:0
    没有啊!
    修改