c# - 从服务运行的进程在服务结束后抛出错误
问题描述
我们创建了一个充当某种“进程启动器”或监视器的服务。
它所做的只是监视某些事情并最终创建多个子进程来完成某些工作。这些子进程是简单的控制台程序,没有 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);
带有各种可能的参数和标志。
解决方案
推荐阅读
- javascript - 加载新页面时如何保持链接的活动状态
- azure - 通过 RDP 连接到 Azure VM:发生内部错误
- wordpress - 将 SSL 添加到 Dockerzied wordpress 容器
- node.js - MongoDB/Moongoose 为特定文档设置 TTL
- android - 从 Android 测试中获取资源: InstrumentationRegistry.getInstrumentation().getTargetContext() VS myActivityTestRule.getActivity()
- html - 另存为 - html thymeleaf
- java - 如何 Xpath 查询包含相同属性值的所有选项标签
- flutter - 过滤掉飞镖中的一系列字符
- html - 之前 之后 Image Slider 设置 Divi, WordPress
- sql - 无法将 r 脚本复制到 sql 查询