首页 > 解决方案 > 从服务运行的进程在服务结束后抛出错误

问题描述

我们创建了一个充当某种“进程启动器”或监视器的服务。

它所做的只是监视某些事情并最终创建多个子进程来完成某些工作。这些子进程是简单的控制台程序,没有 gui 或用户交互。所有都运行在一个专门的服务用户上,我们可以根据 TaskManager 看到所有的会话 id 为 0。

我们注意到,当服务重新启动时,所有仍处于活动状态的子进程突然抛出各种异常。

一个突然不能再访问 ActiveDirectory,另一个有 UNC 路径问题。它没有什么具体的。根据我同事的研究,我们怀疑这与 PROCESS_GROUPS 有关。我们解决这个问题的第一次尝试是确保子进程使用CREATE_NEW_PROCESS_GROUP运行, 但这没有帮助。

有谁知道是什么原因造成的或如何解决这个问题?

其中一个例外如下所示:

System.Runtime.InteropServices.COMException: 
Eine Instanz der COM-Komponente mit der CLSID {080D0D78-F421-11D0-A36E-00C04FB950DC} konnte aufgrund 
des folgenden Fehlers nicht von der IClassFactory erstellt werden: 
800401e4 Ungültige Syntax (Ausnahme von HRESULT: 0x800401E4 (MK_E_SYNTAX)).

我们尝试同时使用

    uint dwCreationFlags = 0;
    ...
    dwCreationFlags |= CREATE_NEW_PROCESS_GROUP;
    dwCreationFlags |= CREATE_NO_WINDOW;
    
    inheritHandles = true // false; both didn't help.

    [DllImport("kernel32.dll", CharSet = CharSet.Ansi)]
    private static extern bool CreateProcess(
        string lpApplicationName,
        string lpCommandLine,
        IntPtr lpProcessAttributes,
        IntPtr lpThreadAttributes,
        bool bInheritHandles,
        uint dwCreationFlags,
        string lpEnvironment,
        string lpCurrentDirectory,
        ref Startupinfo lpStartupInfo,
        out ProcessInformation lpProcessInformation);

ProcessStartInfo info =...
info.CreateNoWindow = true;
Process.Start(info);

带有各种可能的参数和标志。

标签: c#windowsservice

解决方案


推荐阅读