我有一个win32应用程序(称之为包装器),作为其职责的一部分,它启动另一个应用程序(.net - 称之为子)并通过将子项的stdout重定向到它自己的stdout来捕获其输出。
这在控制台上运行良好。
但是,如果.net窗口服务定期启动包装器,则包装器运行正常,但子节点无法运行。 Windows事件查看器中没有.Net堆栈跟踪,子进程返回的进程退出代码为0xC06D007E,相当于"未知软件异常。"
如果我用win32应用程序替换child,它会启动,但似乎编码不匹配,因为输出变成了一堆丢失的字形。但至少应用程序运行并在这种情况下返回退出代码0。
所以我有两个问题,在这里:
这是指向包装应用程序源代码的链接: http://pastebin.com/akgaR090
child的源代码是无关紧要的,因为hello world应用程序足以证明行为。
.net服务使用以下代码调用包装器应用程序: http://pastebin.com/k0DYMB1f
儿童源代码足以复制该问题:
public class Child
{
public int Main(string[] args)
{
}
}