将控制台从.Net应用程序重定向到由服务启动的C ++应用程序

时间:2015-02-11 21:18:43

标签: c# c++ .net winapi windows-services

我有一个win32应用程序(称之为包装器),作为其职责的一部分,它启动另一个应用程序(.net - 称之为子)并通过将子项的stdout重定向到它自己的stdout来捕获其输出。

这在控制台上运行良好。

但是,如果.net窗口服务定期启动包装器,则包装器运行正常,但子节点无法运行。 Windows事件查看器中没有.Net堆栈跟踪,子进程返回的进程退出代码为0xC06D007E,相当于"未知软件异常。"

如果我用win32应用程序替换child,它会启动,但似乎编码不匹配,因为输出变成了一堆丢失的字形。但至少应用程序运行并在这种情况下返回退出代码0。

所以我有两个问题,在这里:

  1. 当从服务(.net)调用时,为什么我不能从包装器(win32)启动子(.net)?
  2. 如果child是win32应用程序,为什么在通过服务调用包装器时会弄乱字符编码,而不是直接在控制台上调用?
  3. 这是指向包装应用程序源代码的链接: http://pastebin.com/akgaR090

    child的源代码是无关紧要的,因为hello world应用程序足以证明行为。

    .net服务使用以下代码调用包装器应用程序: http://pastebin.com/k0DYMB1f

    儿童源代码足以复制该问题:

    public class Child
    {
        public int Main(string[] args)
        {
    
        }
    }
    

0 个答案:

没有答案