当前位置: 首页 > news >正文

网络和网站的区别wordpress 透明文章

网络和网站的区别,wordpress 透明文章,2010年4月江苏省03340网站建设与管理答案,英文外贸网站 php源码2008-05-21 07:00 作者#xff1a; 肖波 出处#xff1a; 天极网 C# 调用外部进程的类#xff0c;网上可以搜出很多来#xff0c;为什么要再写一遍#xff0c;实在是因为最近从网上拷贝了一个简单的例程用到项目中#xff0c;运行有问题#xff0c;后来研究了半天#…2008-05-21 07:00 作者 肖波 出处 天极网  C# 调用外部进程的类网上可以搜出很多来为什么要再写一遍实在是因为最近从网上拷贝了一个简单的例程用到项目中运行有问题后来研究了半天才解决了这些问题。于是打算重写一来说说调用一个外部进程这么简单的一件事究竟会有哪些问题二来也希望我写的这个相对比较完整的类可以为软件开发的同道们节约一些脑细胞以便集中优势兵力解决那些真正高深复杂的软件问题。   在开始正题之前我们先来看一看网上比较常见的执行外部进程的函数    private string RunCmd(string command)    {    //例Process    Process p  new Process();       p.StartInfo.FileName  cmd.exe; //确定程序名    p.StartInfo.Arguments  /c   command; //确定程式命令行    p.StartInfo.UseShellExecute  false; //Shell的使用    p.StartInfo.RedirectStandardInput  true; //重定向输入    p.StartInfo.RedirectStandardOutput  true; //重定向输出    p.StartInfo.RedirectStandardError  true; //重定向输出错误    p.StartInfo.CreateNoWindow  true; //设置置不显示示窗口       p.Start(); //00       //p.StandardInput.WriteLine(command); //也可以用这种方式输入入要行的命令    //p.StandardInput.WriteLine(exit); //要得加上Exit要不然下一行程式       return p.StandardOutput.ReadToEnd(); //输出出流取得命令行结果    }     这个方法应该是比较常见的调用外部进程的方法我以前也一直是这样调用外部进程的也没有碰到过什么问题。但这次调用的外部进程比较特殊用这种方法调用就出现了两个问题。   第一个问题是这个被调用的外部进程有时候会出现异常出现异常后Windows会弹出错误报告框程序于是吊死在那里必须手工干预。这个问题比较好解决程序中设置一下注册表搞定。   第二个问题是调用这个外部进程(是一个控制台进程)后程序会阻塞在p.StandardOutput.ReadToEnd();这一句永远无法出来被调用的那个控制台程序也被吊死。但该控制台进程在CMD 中是可以正常执行的。后来看来一些资料才发现原来原因是出在该控制台程序控制台输出大量字符串管道重定向后调用程序没有及时将管道中的输出数据取出结果导致管道被阻塞程序吊死。在这里还有另外一个问题虽然这次没有遇到但网上有其他人遇到就是错误信息管道不及时取出数据也会被阻塞而且如果要同时取出两个管道的数据必须要利用一个辅助线程才能实现。   问题讲完了下面给出这个类的完整代码    using System;   using System.Collections.Generic;   using System.Text;   using System.Runtime.InteropServices;   using System.Threading;      namespace Laboratory.Process   {    class ReadErrorThread    {    System.Threading.Thread m_Thread;    System.Diagnostics.Process m_Process;    String m_Error;    bool m_HasExisted;    object m_LockObj  new object();       public String Error    {    get    {    return m_Error;    }    }       public bool HasExisted    {    get    {    lock (m_LockObj)    {    return m_HasExisted;    }    }       set    {    lock (m_LockObj)    {    m_HasExisted  value;    }    }    }       private void ReadError()    {    StringBuilder strError  new StringBuilder();    while (!m_Process.HasExited)    {    strError.Append(m_Process.StandardError.ReadLine());    }       strError.Append(m_Process.StandardError.ReadToEnd());       m_Error  strError.ToString();    HasExisted  true;    }       public ReadErrorThread(System.Diagnostics.Process p)    {    HasExisted  false;    m_Error  ;    m_Process  p;    m_Thread  new Thread(new ThreadStart(ReadError));    m_Thread.Start();    }       }       class RunProcess    {    private String m_Error;    private String m_Output;       public String Error    {    get    {    return m_Error;    }    }       public String Output    {    get    {    return m_Output;    }    }       public bool HasError    {    get    {    return m_Error !   m_Error ! null;    }    }       public void Run(String fileName, String para)    {    StringBuilder outputStr  new StringBuilder();       try    {    //disable the error report dialog.    //reference: http://www.devcow.com/blogs/adnrg/archive/2006/07/14/Disable-Error-Reporting-Dialog-for-your-application-with-the-registry.aspx    Microsoft.Win32.RegistryKey key;    key  Microsoft.Win32.Registry.LocalMachine.OpenSubKey(software\microsoft\PCHealth\ErrorReporting\, true);    int doReport  (int)key.GetValue(DoReport);       if (doReport ! 0)    {    key.SetValue(DoReport, 0);    }       int showUI  (int)key.GetValue(ShowUI);    if (showUI ! 0)    {    key.SetValue(ShowUI, 0);    }    }    catch    {    }          m_Error  ;    m_Output  ;    try    {    System.Diagnostics.Process p  new System.Diagnostics.Process();       p.StartInfo.FileName  fileName;    p.StartInfo.Arguments  para;    p.StartInfo.UseShellExecute  false;    p.StartInfo.RedirectStandardInput  true;    p.StartInfo.RedirectStandardOutput  true;    p.StartInfo.RedirectStandardError  true;    p.StartInfo.CreateNoWindow  true;       p.Start();       ReadErrorThread readErrorThread  new ReadErrorThread(p);       while (!p.HasExited)    {    outputStr.Append(p.StandardOutput.ReadLine()\r\n);    }       outputStr.Append(p.StandardOutput.ReadToEnd());       while (!readErrorThread.HasExisted)    {    Thread.Sleep(1);    }       m_Error  readErrorThread.Error;    m_Output  outputStr.ToString();    }    catch (Exception e)    {    m_Error  e.Message;    }    }       }   }    转载于:https://www.cnblogs.com/gofficer/archive/2008/10/30/1322825.html
http://www.zqtcl.cn/news/87899/

相关文章:

  • 网站域名管理权限线上投票怎么弄
  • 网站怎么优化推荐在网站建设流程中编程属于()阶段
  • 专业做家具的网站网站建设服务器要求
  • 企业网站建设 总结阿里云网站建站
  • 国外做科研的网站自己建立网站要钱吗
  • 网站开发人员薪酬wordpress frp
  • 手机上的网站是怎么做的免费行情软件的特点和优势
  • 产品做国外网站有哪些阜宁做网站的公司电话
  • 本校网站建设怎么进wordpress
  • 纪念馆网站建设方案长沙推广公司
  • 网站怎么做后台wordpress 性能怎么样
  • 浙江网站建设网seo公司网站
  • 叫别人做网站需要注意什么创科手机网站
  • 晋中网站建设公司安阳网站优化公司推荐
  • 网站有哪些后台mysql做wp网站
  • 沈阳做网站企业网站生成小程序
  • 集团响应式网站建设网站反向代理怎么做
  • 各电商网站的特点网站做几个域名比较好
  • 音乐网站制作源代码网页版传奇下载
  • 企业网站建设的管理制度wordpress 小工具调用
  • 网站图片优化golang 网站开发 开源
  • 江苏省通信建设交易中心网站服务外包公司
  • 图书管理系统网站开发设计过程网站建设市场调研
  • 广州网站建设:网站设计师工资一般多少
  • 网站建设一般步骤是什么宁波网站搭建
  • 如何域名解析网站建设手机网站设计通用尺寸
  • 河北建设工程信息网可上中项网淘宝店有给网站做优化am
  • 查看网站dns单位公众号怎么制作
  • 广州市城市建设网站最浪漫的编程代码
  • 如何用普通电脑做网站服务器儿童网站设计模板