Tag: system.diagnostics

PerformanceCounter.NextValue挂起在某些机器上

我不知道为什么,但许多计算机挂起以下操作: void Init() { net1 = new List(); net2 = new List(); foreach (string instance in new PerformanceCounterCategory(“Network Interface”).GetInstanceNames()) { net1.Add(new PerformanceCounter(“Network Interface”, “Bytes Received/sec”, instance)); net2.Add(new PerformanceCounter(“Network Interface”, “Bytes Sent/sec”, instance)); } } //Once in 1 second void UpdateStats() { Status.Text = “”; for (int i = 0; i < net1.Count; i++) Status.Text += […]

在我的C#Win应用程序中打开Windows计算器?

我知道我可以使用以下代码打开Windows Calculator: System.Diagnostics.Process.Start(“calc”); 但是我想在我的C#Win应用程序中打开它,即:我不想在独立窗口中打开它,我想在我的窗口中打开它。 我该怎么做 ?

C#:重定向已经运行的进程的标准输出

我一直很难获得“子流程”的输出(一个由我通过c#System.Diagnostics.Process监控的黑盒流程内部启动) 我接受了上一篇文章的回答: 这里 。 在那里你可以找到我经历过的细节。 此时,虽然我能够找到由process1.exe生成的ssh进程,但我正在监视。 我无法将输出重定向到我的c#程序,因为它是一个“已在运行的进程”,并且不是直接从C#启动的。 看来,您在System.Diagnostics.Process对象上设置的所有属性只有在从c#应用程序显式启动该进程时才会生效; 如果某个其他“非托管进程”已启动该进程,则设置此重定向无效,因为该进程已由未指定我需要的重定向的内容启动。 有没有办法重定向已经启动的进程的输出(由程序启动的进程,我没有在启动此进程之前预先指定重定向的范围)?

“优雅地”杀死一个进程

现在我正在使用Process.Kill()来杀死进程。 有没有办法,而不是立即杀死它,我可以向进程发送一条消息,指示它关闭,以便它可以优雅地清理和关闭。 基本上,我正在寻找仅仅点击右上角的红色X的等价物,我相信它会向请求关闭的应用程序发送消息。

控制台应用程序中的FileVersionInfo.GetVersionInfo()不正确

我使用FileVersionInfo.GetVersionInfo()得到了一些严重的怪异,并希望有人可以提供帮助。 问题的基础是我正在遍历每个文件夹中调用GetVersionInfo()的所有文件。 大约有300个文件。 这适用于除2个文件之外的所有文件。 对于这些DLL,我从GetVersionInfo()得到了完全不正确的信息。 为了消除所有其他变量,我将此调用提取到一个简单的测试应用程序中,它仍然遇到了同样的问题。 但是,如果我将测试应用程序构建为Windows应用程序(最初是控制台应用程序),那么数据会恢复正常。 只是为了澄清一下,当作为控制台应用程序运行时返回的不正确数据不仅仅是如果文件不包含版本数据就会得到的空信息。 它包含合理的数据,但只包含错误的数据。 就好像是从不同的文件中读取它一样。 我找了一个包含匹配版本数据的文件,但找不到。 如果构建为控制台应用程序而不是Windows应用程序,为什么这个简单的调用function会不同? 如果有人可以帮助我,我将非常感激。 安德,安迪 – 已添加代码 using System; using System.Diagnostics; namespace test { class Program { static void Main(string[] args) { string file = “C:\\ProblemFile.dll”; FileVersionInfo version = FileVersionInfo.GetVersionInfo(file); string fileName = version.FileName; string fileVersion = version.FileVersion; Console.WriteLine(string.Format(“{0} : {1}”, fileName, fileVersion)); } } }

如何:在C#应用程序代码中禁用/启用WCF跟踪

我花了一段时间才能做到这一点,所以我决定分享一个解决方案,因为它可能会为其他人节省几天的反复试验。 问题:我希望能够在我的C#.NET应用程序中启用/禁用WCF跟踪并选择跟踪输出文件名。 我不希望用户编辑.config文件,那里有太多的错误空间。 这是一个解决方案。 应用程序的.config文件: 我的C#代码: using System; using System.IO; using System.Diagnostics; namespace MyNamespace { public class MyXmlListener : XmlWriterTraceListener { public static String TraceOutputFilename = String.Empty; public static Stream MakeOutputStream() { if (String.IsNullOrWhiteSpace(TraceOutputFilename)) return Stream.Null; return new FileStream(TraceOutputFilename, FileMode.Create); } public MyXmlListener () : base(MakeOutputStream()) { } } } 要启用WCF跟踪到文件,请在创建WCF对象之前设置TraceOutputFilename: MyXmlListener.TraceOutputFilename = “trace.svclog”; 我从这个论坛获得了很大的好处,我希望这篇文章付出代价! […]

从System.Diagnostics.Process调用dism.exe失败

为了在Windows 2008 R2 Server(64位)中启用Microsoft-Hyper-V和Microsoft-Hyper-V-Management,我将dism.exe称为进程。 我用过的命令是 Dism.exe / online / Get-FeatureInfo / FeatureName:Microsoft-Hyper-V Dism.exe / online / Get-FeatureInfo / FeatureName:Microsoft-Hyper-V-Management-Clients 当我从命令行执行此操作时,这可以正常工作,但当我尝试通过我的代码执行它时,它会失败。 我在C:\ Windows \ SysWoW64文件夹下尝试过64位版本的Dism.exe,但它也失败了。 这是我收到的错误消息, 您无法使用32位版本的DISM为正在运行的64位操作系统提供服务。 请使用与您的计算机体系结构相对应的DISM版本。 我在这里想念的是什么? 更新:SLaks是正确的,但问题是默认情况下MS Visual Studio Express版本的目标是x86,我必须在.csproj文件中手动编辑到AnyCPU以使其工作。

跟踪日志位置,查看位置

你在哪里看到Trace.Write(“”); 在开发MVC或WCF应用程序时记录日志? 什么是正确的地方?

即使调用了TraceEvent,也没有创建跟踪文件?

目的 使用System.Diagnostics执行跟踪。 虽然我使用了log4net和其他日志记录解决方案,但我只对跟踪使用System.Diagnostics感兴趣。 问题 即使我发出了TraceEvent ,也没有在任何地方创建文件。 应用信息 我有一个托管一些WF服务的应用程序。 其中一个服务是状态机,其初始状态如下所示: LogMessage自定义活动也很直接。 它收到四个基本参数: 将TraceSource定义为变量: 然后只需调用TraceEvent : 组态 此TraceSource和TraceListener的配置如下:

在收到新行之前读取Process StandardOutput

我正在尝试做一些看起来超出System.Diagnostics.Process对象范围的事情。 只要使用.net 4.5 / c#5,可接受的答案就可以提出不同的方法。 我的程序正在调用gdalwarp.exe来对大型tiff文件执行长时间运行的进程。 Galwarp.exe以此格式输出。 Creating output file that is 6014P x 4988L. Processing input file [FileName].tiff. Using band 4 of source image as alpha. Using band 4 of destination image as alpha. 0…10…20…30…40…50…60…70…80…90…100 – done. 最后一行缓慢流入以指示进度。 我想在每次更改时读取该行,以便我可以移动进度条,让用户知情。 首先,我尝试读取Process.StandardOutput但在整个过程完成之前,它不会提供任何数据。 其次,我尝试调用Process.BeginOutputReadLine()并连接事件Process.OutputDataReceived但它只在一行完成时触发。 这是对Execute GDalWarp.exe的调用。 public static void ResizeTiff(string SourceFile, string DestinationFile, float ResolutionWidth, float ResolutionHeight, […]