我使用 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(使用前将#替换为@)