在 C# Windows 服务上重定向 stdout+stderr

2023-11-27

我使用 C# 编写了一个 Windows 服务ServiceBase帮手。在执行期间,会调用外部本机 DLL 中的一些过程。令人烦恼的是,这些过程以不受控制的方式写入 stdout 和/或 stderr,因为没有给出该 DLL 的源代码。

是否可以将这些输出从 C# 服务重定向到日志文件?


您可以通过 PInvoke 执行此操作设置标准句柄:

[DllImport("Kernel32.dll", SetLastError = true) ]
public static extern int SetStdHandle(int device, IntPtr handle); 

// in your service, dispose on shutdown..
FileStream filestream;
StreamWriter streamwriter;

void Redirect()
{   
    int status;
    IntPtr handle;
    filestream = new FileStream("logfile.txt", FileMode.Create);
    streamwriter = new StreamWriter(filestream);
    streamwriter.AutoFlush = true;
    Console.SetOut(streamwriter);
    Console.SetError(streamwriter);

    handle = filestream.Handle;
    status = SetStdHandle(-11, handle); // set stdout
    // Check status as needed
    status = SetStdHandle(-12, handle); // set stderr
    // Check status as needed
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 C# Windows 服务上重定向 stdout+stderr 的相关文章

  • C/C++ 程序是在 CPU 上运行还是在内核上运行?

    我已经编程很多年了 但有一件事我一直不明白 有两种类型的编程语言 编译型语言和解释型语言 编译型语言首先需要编译成解释型语言 然后才能执行 例如 C C 需要先编译为机器语言 然后才能执行 我的问题来了 谁真正运行已编译的 C C Wind
  • Windows 10 UWP 中的视觉状态管理器未在页面加载时应用初始状态

    我有一个带有相关面板的页面 可以根据宽度重新组织 但是 除非宽度 gt 720px 否则它似乎不会在加载时应用任何状态 如果我在加载页面后调整页面大小 则两种状态都有效 解决方法是检查加载页面上的窗口大小并手动选择状态 但我相信这应该自动处
  • MVC 中的 Blazor:组件被渲染,但 @onclick 不起作用。连接问题

    我正在尝试在 net core 3 MVC 项目中使用 Blazor 我使用了一些教程来做到这一点 例如https fizzylogic nl 2019 08 18 integrating blazor in an existing asp
  • 是否可以通过引用以基类作为参数的函数来传递派生类

    假设我们有一个抽象基类IBase使用纯虚方法 接口 然后我们推导出CFoo CFoo2来自基类 我们有一个知道如何使用 IBase 的函数 Foo IBase input 这些情况下通常的场景是这样的 IBase ptr static ca
  • Windows CE 6.0 和运行时链接到调试 DLL /MDd

    我在 x86 PC 上使用 Windows CE 6 0 R3 我已经为该平台构建了 NK bin 和 SDK 但我有一些问题需要了解如何使用 MTd 调试 DLL 构建控制台应用程序 如果我尝试构建这个 main c with MDd i
  • MSVC10 /MP 在项目中跨文件夹构建非多核

    我希望有人指出我们所遇到的错误或解决方法 使用 MP 编译项目时 似乎仅同时编译同一文件夹中的文件 我使用进程资源管理器来滑动命令行并确认行为 项目过滤器似乎对同时编译的内容没有影响 项目结构disk Folder project vcxp
  • 使用 Process.Start() 打开文件夹时访问被拒绝异常

    我有一个 C 中的 winforms 应用程序 我必须在其中打开某个文件夹 我用 System Diagnostics Process Start pathToFolder 这会导致以下异常 System ComponentModel Wi
  • 是否可以获取指向装箱非托管值类型的指针?

    是否可以获取指向装箱非托管值类型的指针 而无需编写对每个支持的类型进行强制转换的大型 switch 语句 就像是 object val Contains a boxed unmanaged value such as int long by
  • memccpy 返回比 src 起始地址更低的内存地址

    我有一个学校项目 我必须重新编码memccpy 功能 我使用 2 个程序来检查我的代码是否正常工作 第一个是只有一个主程序的小程序 第二个程序是另一个学生开发的 可以找到here https github com yyang42 mouli
  • 使用 C# 和 .NET Core 在 AWS Cognito 用户池中进行用户管理

    如何使用 C 和 NET Core 3 x 管理 AWS Cognito 用户池中的用户 在文档中找不到有关它的任何内容 Attilio Gelosa 的原创文章 我写这篇文章是希望对其他人有帮助 我必须阅读一页又一页的文档 并从 AWS
  • Parallel.ForEach - 优雅取消

    关于等待任务完成和线程同步的主题 我目前有一个迭代 我已将其包含在 Parallel ForEach 中 在下面的示例中 我在评论中提出了一些关于如何最好地处理循环的优雅终止的问题 NET 4 0 private void myFuncti
  • C++ 中类型信息何时向后流动?

    我刚刚看了 Stephan T Lavavej 的演讲CppCon 2018关于 类模板参数推导 在哪里某个点 https youtu be H ut6j1BYU t 941他顺便说 在 C 中 类型信息几乎永远不会向后流动 我不得不说 几
  • 运行 Aero 时如何确定实际窗口窗体大小(包含所有非客户端元素)?

    我试图将我的表单精确定位在任务栏上方 不幸的是 我的努力受到了以下事实的阻碍 this Height在我的表单上返回一个比实际表单 包含所有边框 标题栏等 小 10 像素的值 我正在运行带 Aero 的 Windows 7 当 Aero 关
  • 当 C 中没有足够的内存用于静态分配时会发生什么?

    当您动态分配内存时 例如malloc 1024 sizeof char 结果指针设置为NULL如果没有足够的可用内存来满足请求 当没有足够的内存来满足静态分配时会发生什么 例如char c 1024 char c 1024 不一定是静态分配
  • 为什么我从 c# 到 js 得到不同的 MD5 哈希值?

    我有一个用于加密密码的 C 函数 System Security Cryptography MD5CryptoServiceProvider md5Provider new System Security Cryptography MD5C
  • 函数中的重复参数检查

    我经常有调用层次结构 因为所有方法都需要相同的参数 如果我不想将它们放在实例级别 类的成员 那么我总是问我在每个方法中检查它们的有效性是否有意义 例如 public void MethodA object o if null o throw
  • 来自资源中 ImageSource 的 System.Drawing.Image

    我的问题与这个非常相似 wpf图像资源以及运行时在wpf控件中更改图像 https stackoverflow com questions 940592 wpf image resources and changing image in w
  • std::iota 的 iota 代表什么?

    我假设 i 是增量 a 是分配 但我无法弄清楚或找到答案 而且 它看起来与非标准非常相似itoa我认为这很令人困惑 C iota is not an acronym or an initialism It is the word iota
  • 如何在您的网站中连接两个人

    有一款名为 Verbosity 的游戏 这是一款有目的的游戏 位于此链接上www gwap com 在游戏中 他们随机连接两个玩家互相玩 游戏是玩家1应该向他的搭档 玩家2 描述一个单词 而玩家2应该猜测这个单词 我正在尝试建立一个网站来执
  • 清理 TPL 中的 CallContext

    根据我使用的是基于 async await 的代码还是基于 TPL 的代码 我在逻辑清理方面得到了两种不同的行为CallContext 我可以设置和清除逻辑CallContext如果我使用以下异步 等待代码 正如我所期望的 class Pr

随机推荐

  • 应用程序关闭时 FCM 推送通知不起作用 Android

    好吧 我到处都找过了 但找不到答案 我已经在我的 Android 应用程序中实现了推送通知 并且当应用程序处于活动状态 前台或后台 时一切正常 但是如果我关闭应用程序 我将停止接收通知 这是我发送通知的 php 代码 public stat
  • javascript DefineProperty 使属性不可枚举

    我试图使用 DefineProperty 使属性不会出现在 for in 循环中 但它不起作用 这段代码正确吗 function Item this enumerable enum this nonEnum noEnum Object de
  • 获取文件上次修改日期(资源管理器值而不是cmd值)

    我编写了一些 Excel VBA 代码来将文件名 版本和上次修改日期 时间添加到工作表中 该代码似乎工作正常 除了有时的时间部分Last Modified Date一个文件将比我在资源管理器窗口中看到的向前或向后正好 1 小时 我注意到 如
  • 如何使用 Android Phonegap 读取条形码?

    我想使用 Android Phonegap 扫描条形码 我怎样才能做到这一点 查看 PhoneGap 条形码教程here 它将引导您逐步创建一个示例应用程序zxing通过 PhoneGap 插件紫甘蓝
  • 使用 JavaScript 测试输入是韩语还是中文的正确方法是什么?

    我的应用程序依赖此函数来测试字符串是否是韩语 const isKoreanWord input gt const match input match u3131 uD79D g return match match length input
  • 如何在 Swift 中使用 NSTimer 和 NSNotificationCentre 更新 UITableViewCells

    注意 寻求答案Swift please 我正在尝试做的事情 让表格视图单元格每 1 秒更新一次并显示实时 倒数 我目前是如何做的 我有一个表格视图 其中的单元格包含标签 生成单元格时 它们会调用一个函数来计算今天与存储的目标日期之间的时间
  • URL 长度的最佳限制是多少? 100, 200+

    我有一个 ASP Net 3 5 平台和带有所有更新的 Windows 2003 服务器 Net 有一个限制 它不能处理超过260 个字符 而且如果你上网查一下 你会发现IE 6如果不打补丁的话 在100个字符以上就无法工作 我希望最大数量
  • 带有 ListView 和按钮的 Android 布局

    好吧 这个特定的布局让我很恼火 并且似乎无法找到一种方法来拥有一个列表视图 在底部有一排按钮 这样列表视图就不会延伸到按钮的顶部 因此按钮总是捕捉到屏幕的底部 这就是我想要的 删除了无效的 ImageShack 链接 看起来应该很容易 但我
  • 在 C# 中功能性地遍历一棵树

    考虑 C 中的以下扩展方法 Traverse IEnumerable
  • 如何修复 ICE57.Per-User 安装

    我们的应用程序在运行时将注册表的一些设置写入 HKCU 配置单元 我想在卸载过程中删除此设置 这是代码
  • Backbone 和 Require 如何添加 Qunit

    我正在使用 Backbone 和 Require js 一切都很好 但是 我想向我的应用程序添加一些单元测试 我决定使用 Qunit js In my main js文件我创建新对象EventsView require config pat
  • 我可以在控件内托管 Windows 窗体吗

    我有一个客户 它是一个具有有线表示逻辑的单实例模式下的 Visual Basic 项目 主窗体包含一个具有多个选项卡页的 TabControl 如果我单击 TabPage 另一个窗体会显示在窗体前面 并调整大小以与 TabPage 具有相同
  • 如何获取Oracle中每个组的最大值? [复制]

    这个问题在这里已经有答案了 我已经找到了解决此问题的一些解决方案 但是它们似乎不适用于 Oracle 我懂了 我想要一个视图只显示每个团队中最年长的人的信息 所以 我的输出应该是这样的 PERSON TEAM AGE Sam 1 23 Mi
  • 获取发送到 click.group() 子命令的参数

    如果我有一个click group 对于多个子命令 有没有办法可以将命令行参数传递给组本身内的这些子命令 我知道你可以通过context 而且我知道我可以使用callback将在命令之前执行的函数 但我不知道是否有比使用更好的方法来执行此操
  • 有没有办法在 Windows 上的链接时重新定义 malloc?

    我想在链接时替换默认的 malloc 以使用自定义 malloc 但是当我尝试在程序中重新定义 malloc 时 出现以下错误 MSVCRT lib MSVCR80 dll error LNK2005 malloc already defi
  • Azure Functions,无法加载文件或程序集

    当使用NuGet协议Azure Functions 中的 NuGet 包 出现以下错误 System Private CoreLib Could not load file or assembly 4 18 2020 8 51 43 AM
  • 根据单元格值数据按路径引用 Excel 工作簿

    我有一个 Excel 工作表 可以从其他关闭的 Excel 工作簿中提取数据 目前 当我列出关闭的工作簿的整个路径时 它工作正常 但我想使用存储在单独单元格中的变量作为路径名的一部分 例如 我正在尝试引用名为的工作簿 工作簿12 10 12
  • 在 joomla 组件中写入多个表?

    我正在尝试创建一个使用多个表的组件 前端 我发现一两个帖子部分回答了这个问题 但没有一个真正回答了这个问题 对于知道如何做的人来说 这一点似乎总是简单明了 但从未真正解释过 或者我错过了正确的帖子 在我的组件中 用户在一个视图中输入需要存储
  • 需要处理 git-archive 中的 git-submodules

    我需要将 git 子模块打包到我创建的 tarball 中git archive 我在1 6 5中看到了git archive不支持 git 子模块 我在网上看到了几个处理这种情况的脚本 但我不确定该选择哪一个 最好 最官方的方法是什么 你
  • 在 C# Windows 服务上重定向 stdout+stderr

    我使用 C 编写了一个 Windows 服务ServiceBase帮手 在执行期间 会调用外部本机 DLL 中的一些过程 令人烦恼的是 这些过程以不受控制的方式写入 stdout 和 或 stderr 因为没有给出该 DLL 的源代码 是否