首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在.NET应用程序中检测重定向控制台输出中的已关闭管道

在.NET应用程序中检测重定向控制台输出中的已关闭管道,可以通过以下方法实现:

  1. 使用Process类创建一个新的进程,并重定向输出和错误输出。
  2. 使用StreamReader类读取输出和错误输出。
  3. 使用Task类异步读取输出和错误输出。
  4. 使用CancellationToken类监测管道是否关闭。

以下是一个示例代码:

代码语言:csharp
复制
using System;
using System.Diagnostics;
using System.IO;
using System.Threading;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        var process = new Process
        {
            StartInfo = new ProcessStartInfo
            {
                FileName = "your_command_here",
                Arguments = "your_arguments_here",
                RedirectStandardOutput = true,
                RedirectStandardError = true,
                UseShellExecute = false,
                CreateNoWindow = true
            }
        };

        var cancellationTokenSource = new CancellationTokenSource();

        var outputTask = ReadStreamAsync(process.StandardOutput, cancellationTokenSource.Token);
        var errorTask = ReadStreamAsync(process.StandardError, cancellationTokenSource.Token);

        process.Start();

        await Task.WhenAll(outputTask, errorTask);

        process.WaitForExit();

        Console.WriteLine("Process exited with code: {0}", process.ExitCode);
    }

    static async Task ReadStreamAsync(StreamReader streamReader, CancellationToken cancellationToken)
    {
        try
        {
            while (!streamReader.EndOfStream)
            {
                cancellationToken.ThrowIfCancellationRequested();

                string line = await streamReader.ReadLineAsync();

                Console.WriteLine(line);
            }
        }
        catch (OperationCanceledException)
        {
            Console.WriteLine("Stream reading cancelled.");
        }
    }
}

在这个示例中,我们创建了一个新的进程,并重定向了输出和错误输出。然后,我们使用ReadStreamAsync方法异步读取输出和错误输出。在ReadStreamAsync方法中,我们使用cancellationToken.ThrowIfCancellationRequested()方法检测管道是否关闭,如果管道已关闭,则抛出OperationCanceledException异常。最后,我们在主方法中等待所有任务完成,并等待进程退出。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C# 自定义控制台输出重定向整合调用方信息

C# 自定义控制台输出重定向整合调用方信息 目录 C# 自定义控制台输出重定向整合调用方信息 一、前言 二、输出重定向基础版 三、输出重定向进阶版(传递调用方信息) 四、后记及资源 独立观察员...2021 年 1 月 6 日 一、前言 众所周知, .NET 控制台应用程序(就是那种小黑框程序)输出信息,使用控制台输出方法 Console.Write ("消息") 或 Console.WriteLine...原来我构造函数添加了这么一句 —— Console.SetOut (new ConsoleWriter (ShowInfo)); —— 这就把原本输出控制台消息,重定向给了方法 ShowInfo...Write 方法,然后重写 Write 方法调用外部设置好(通过构造函数)相关委托方法进行实际信息输出。...,自动识别为调用 ConsoleWriter 我们新增那个构造函数: 运行,测试,可以看到方法名和行号都对了: 四、后记及资源 这种重定向方式个人觉得挺方便,比如在动态库全都写成输出控制台方式

1.6K20
  • 通过重建Hosting系统理解HTTP请求ASP.NET Core管道处理流程:采用管道处理请求

    我们甚至可以通过管道定制ASP.NET Core平台上创建我们自己Web框架,实际上MVC和SingalR这两个重要Web框架也是采用这样方式创建。...为了使读者朋友们能够以最直观感受认识ASP.NET Core消息处理管道,我们来创建一个最简单Hello World程序。这是一个控制台应用,整个程序由如下所示五行代码组成。...总的来说,ASP.NET Core管道由WebHost启动时候构建,WebHostBuilder则是后者创建者,下图揭示了三者之间关系。 ?...所以应用程序可以视为某个中间件一部分,如果一定要将它独立出来,整个请求处理管道将呈现出如下图所示结构。 ?...方法注册一个Action类型委托,注册中间定义管道逻辑更多地还是定义一个单独类型

    1.4K80

    Log4j 2.0开发高级使用详解—配置简单控制台输出(三)

    Log4j 2.0最近迎来了重大版本升级。解决了1.x死锁bug之外,性能也有10倍提升。 同样最新版本新特性。...更是支持json和yaml配置文件。 日志使用在我们日常开发中经常用到。也有很多高手遇到过日志死锁问题。2.0引入了异步日志处理。死锁问题得以解决。...好吧,介绍了这么多,进入它helloworld吧。 今天看看它简单配置。配置输出到console日志记录器,并且为info级别的输出。...org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; /** * @see log4j 2.0 简单配置使用控制台...* @author Herman.Xiong * @date 2014年7月21日 14:32:55 */ public class Test1 { /** * 配置日志级别为info,输出位置为控制台

    98920

    通过重建Hosting系统理解HTTP请求ASP.NET Core管道处理流程:管道如何处理请求

    如果想非常深刻地认识ASP.NET Core请求处理管道,我觉得可以分两个步骤来进行:首先,我们可以忽略具体细节前提下搞清楚管道处理HTTP请求总体流程;在对总体流程有了大致了解之后,我们再来补充这些刻意忽略细节...、接收和响应 一、建立“模拟管道”上应用 再造迷你管道不仅仅体现了真实管道处理HTTP请求流程,并且对于其中涉及接口和类型,我们也基本上采用了相同命名方式。...调用WebHostBuilderConfigure方法定义管道过程,我们调用IApplicationBuilder接口扩展方法UseImages完成了针对这个中间件定制。...DefaultHttpContext所用,原因在于它们类型都实现统一接口,模拟管道模型,我们定义了如下两个针对请求和响应特性接口IHttpRequestFeature和IHttpResponseFeature...四、服务器——实现对请求监听、接收和响应 管道服务器通过IServer接口表示,模拟管道对应应用编程接口中,我们只保留了两个核心成员,其中Features属性返回描述服务器特性,而Start

    1.9K90

    C#.NET应用程序开发创建一个基于Topshelf应用程序守护进程(服务)

    文章目录 C#/.NET基于Topshelf创建Windows服务系列文章目录: C#/.NET基于Topshelf创建Windows服务程序及服务安装和卸载 (1) C#/.NET应用程序开发创建一个基于...本文主要演示C#/.NET应用程序开发创建一个基于Topshelf应用程序守护进程(服务)。...在这个解决方案再创建一个名为TopshelfDemo.Client客户端控制台应用程序,这个客户端程序即是我们需要使用[TopshelfDemoService]守护。...当我们把客户端关闭后,下次守护程序检测时候客户端程序又会被重启。...好了,今天C#/.NET应用程序开发创建一个基于Topshelf应用程序守护进程(服务)分享就到这里。 我是Rector,希望本文对C#/.NET开发你有所帮助。

    2.1K20

    通过重建Hosting系统理解HTTP请求ASP.NET Core管道处理流程:管道是如何构建起来

    《中篇》,我们对管道构成以及它对请求处理流程进行了详细介绍,接下来我们需要了解是这样一个管道是如何被构建起来。...由于ApplicationBuilder与组成管道中间件具有直接关系,所以我们得先来说说中间件管道究竟体现为一个怎样对象。...大部分应用,我们会针对具体请求处理需求注册多个不同中间件,这些中间件按照注册时间先后顺序进行排列进而构成管道。...URL和PathBase解析出目标图片真实路径,并最终将文件内容写入到响应输出。...模拟管道,我们为这个接口保留了如下三个方法,其中WebHost对象创建实现在Build方法

    4.3K50

    四十.Powershell恶意代码检测系列 (1)Powershell基础入门及管道和变量用法

    3.控制台和快捷键 4.数学运算 二.Powershell管道重定向 1.管道 2.重定向 三.Powershell执行外部命令及命令集 1.外部命令 2.命令集 四.Powershell别名使用 1...1.管道 Powershell管道旨在将上一条命令输出作为下一条命令输出。...管道并不是什么新事物,以前Cmd控制台也有重定向命令,例如Dir | More可以将结果分屏显示。传统Cmd管道是基于文本,但是Powershell管道是基于对象。...ls | format-table name, mode ---- 2.重定向 重定向旨在把命令输出保存到文件,‘>’为覆盖,’>>’追加。...---- 三.Powershell执行外部命令及命令集 1.外部命令 Powershell是CMD一个扩展,仍然能够让CMD命令Powershell中使用,Powershell初始化时会加载CMD

    8.8K30

    网络安全自学篇(十九)| Powershell基础入门及常见用法(一)

    方便 支持面向对象 支持和.net平台交互 强大兼容性,和cmd、vbs相互调用 可扩展性好,它可以用来管理活动目录、虚拟机产品等平台 3.控制台和快捷键 鼠标右键属性,可以对Powershell控制台进行编辑...二.Powershell管道重定向 1.管道 Powershell管道旨在将上一条命令输出作为下一条命令输出。 ?...管道并不是什么新事物,以前Cmd控制台也有重定向命令,例如Dir | More可以将结果分屏显示。传统Cmd管道是基于文本,但是Powershell管道是基于对象。例如: ? ?...如果只获取其中name、mode值,则使用如下指令。 ? ? 2.重定向 重定向旨在把命令输出保存到文件,‘>’为覆盖,’>>’追加。 ?...三.Powershell执行外部命令及命令集 1.外部命令 Powershell是CMD一个扩展,仍然能够让CMD命令Powershell中使用,Powershell初始化时会加载CMD应用程序

    8.1K30

    xv6(19) SHELL交互程序

    输入重定向需要关闭文件描述符 0,输出重定向需要关闭文件描述符 1。...这里提一句虽然 $shell$ 里面区分了输出重定向覆盖和追加两种情况,但实际 $xv6$ 还没有实现相应功能,这需要我们自行添加这个功能,具体点就是从文件结构体偏移量入手。...根据前面讲述重定向机制,关键点就是关闭标准输入或者标准输出,因为分配文件描述符从最小分配起走,所以打开要重定向文件时,该文件描述符就是之前关闭 $stdio$ 描述符。...$pipeclose$ 来关闭管道,当 $pipeclose$ 检测到读端写端都被关闭时候就会回收管道资源即删除管道。...另外这最后解决前文控制台输入输出一文遗留一个问题,为什么控制台键入 Ctrl + D 会导致 shell 退出,从这里我们看出如果 getcmd 函数返回值小于 0 的话,那么 shell 就会执行

    37510

    ServiceSelf 解决.NET应用程序做服务难题

    一、ServiceSelf 为.NET 泛型主机应用程序提供自安装为服务进程能力,支持windows和linux平台。...控制台模式启动时,我们很容易直接在控制台看到实时日志打印,但安装为服务后,查看控制台日志变得不容易或无法实现,linux平台有journalctl,它是基于管道,它无法知道一条日志内容边界,很难把符合过滤特征日志完整显示...;windows平台有session隔离机制,服务进程和桌面用户进程不在同一个session,所以桌面用户看不到服务进程控制台,也没有管道可以重定向来读取服务进程控制输出。...也就是它不会在服务进程上让日志无脑地输出到串行化输出低性能控制台,也不会让服务进程没有监听者情况下无脑输出Google.Protobuf结构化日志,即这个日志组件对服务进程没有性能影响。...由于监听者与服务进程是同一个应用程序不同进程,当应用程序OutputType是WinExe模式且运行在windows时,这时候是没有Console,ServiceSelf做为监听者角色时会检测和动态创建

    17020

    二十二.Powershell基础入门及常见用法-1

    3.控制台和快捷键 4.数学运算 二.Powershell管道重定向 1.管道 2.重定向 三.Powershell执行外部命令及命令集 1.外部命令 2.命令集 四.Powershell别名使用...1.管道 Powershell管道旨在将上一条命令输出作为下一条命令输出。...管道并不是什么新事物,以前Cmd控制台也有重定向命令,例如Dir | More可以将结果分屏显示。传统Cmd管道是基于文本,但是Powershell管道是基于对象。...ls | format-table name, mode 2.重定向 重定向旨在把命令输出保存到文件,‘>’为覆盖,’>>’追加。...---- 三.Powershell执行外部命令及命令集 1.外部命令 Powershell是CMD一个扩展,仍然能够让CMD命令Powershell中使用,Powershell初始化时会加载CMD

    7.2K20

    《ASP.ENT Core 与 RESTful API 开发实战》(第3章)-- 读书笔记(上)

    {Environment}.json、用户机密(仅开发环境)、环境变量和命令行参数等位置加载应用配置 配置日志功能,默认添加控制台输出和调试输出 如果应用程序呗托管 IIS ,启动 IIS 集成,它会配置应用程序主机地址和端口...ASP.NET Core 服务器时,它会在 ASP.NET Core 进程内运行,并负责监听 HTTP 请求以及对每一次请求返回 HTTP 响应 实际生产环境部署应用程序时,推荐使用主流 Web...,本质上是一段用来处理请求与响应代码,多个中间件之间链式关系使之形成了管道 ASP.NET Core 内置了多个中间件,它们主要包含 MVC 认证、错误、静态文件、HTTPS 重定向和跨域资源共享...每一个中间件都是通过调用 IApplicationBuilder 接口 Use 和 Run 方法添加到请求管道 下面的例子是使用 Run 方法来添加一个中间件,该中间件会输出与本次请求相关信息...,同时分支上添加并执行中间件 Map 会根据是否配置指定请求路径来决定是否一个新分支上继续执行后续中间件,并且新分支上执行完后,不再回到原来管道上 MapWhen 则可以满足更复杂条件

    90310

    powershell学习备忘

    alias.ps1 # 导出别名 Import-Alias -Force alias.ps1 # 导入别名 详细参见这里 管道重定向 powershell里支持管道,但要注意不像linux管道,...powershell里管道输出、输入都是对象,如下: 1 ls | sort -Descending Name | Format-Table Name,Mode powershell支持重定向,>为覆盖...函数 Process 块,$Input 变量包含当前位于管道对 象。 Process 块完成后,$Input 值为 NULL。...例如,可以命令中使用此变量确定是否创建某个配置文件: test-path $profile 也可以命令中使用此变量创建配置文件: new-item -type file -path $pshome...Tee-Object: 将命令输出保存在文件或变量,并将其显示控制台中。 Where-Object: 创建控制哪些对象沿着命令管道传递筛选器。

    12.4K60

    DevSecOps 管道: 使用Jenkins自动化CICD管道以实现安全多语言应用程序

    利用 Jenkins 灵活性和 Groovy 脚本编写功能,我简化了这些将工具整合到一个有凝聚力管道管道配置 进入管道作业配置页面。将打开此页面。...第 5 阶段(Java 检测) 正如我之前指出,Java 可能会被自动检测到,您将能够看到它是否受支持。因此,执行此操作之前,请确保您已在 Jenkins 工具设置了 JDK。...Kubernetes 部署 环境阶段,提供您 kube 配置凭据并添加部署.yaml 文件名称来代替配置文件。 环境 成功创建部署后,应用程序现在将在您 Pod 上运行。...第 10 阶段(Zaproxy 测试) 我们已经进行了 SAST 扫描和应用测试;展望未来,我们将执行 DAST,其目的是整个软件开发和测试阶段协助检测 Web 应用程序安全漏洞。...如果您更改“保存”,页面将重定向到主站点。之后,单击“立即构建”按钮。 构建历史 作业将开始执行。您可以控制台查看作业结果,看看是否有问题。 控制台输出 我们可以看到我们工作输出已经成功。

    66420

    .NET平台系列25:从 ASP.NET 迁移到 ASP.NET Core 技术指南

    Startup 应用程序中注册一组中间件。 对于每个请求,应用程序都使用现有处理程序集链接列表头指针调用各个中间件组件。 每个中间件组件可以向请求处理管道添加一个或多个处理程序。...//关闭此选项后,通过RouteTable.routes上使用MapOwinPath或MapOwinRoute扩展global.asax文件添加路由,您仍然可以让OWIN应用监听特定路由... Configure ,向管道添加必要中间件。...在下面的示例(来自默认网站模板),扩展方法为管道配置以下支持: 错误页 HTTP 严格传输安全 从 HTTP 重定向到 HTTPS ASP.NET Core MVC public void Configure...这些设置可用于支持应用程序部署到环境(以此用途为例)。

    2.2K20

    php各种 IO流 以及用法

    php处理,最后输出到用户端/控制台,而这个就是"hello world"就是  输出 流,程序把这个字符串处理成一串串二进制,输出到了用户端/控制台,这样字符串就叫做输出流 同理,用户发起一个...php,主要是指在php-cli运行模式下,用户使用键盘输入到控制台数据,例如:(注意,需要使用php-cli模式) <?...php://stdin,也是关闭复制,STDIN打开不会被关闭 2:php://stdin是只读 3:请直接使用STDIN常量,而不使用php://stdin 4:使用fgets读取,只能读取一行数据...(检测到回车就返回),可以使用stream_get_contents 控制读取数量,用于一次性读取包含换行输入数据 STDOUT输出流 STDOUT和STDIN正好相反,是标准输出流,它将运行php将字符串默认输出控制台...1\n"); echo "这是输出2\n"; fwrite(STDOUT,"这是输出3\n"); 和stdin注意点一样,这里不复制了,但需要加上一条: php-cli模式,作用和echo相同,但是实现方式不一样

    1.4K21
    领券