【发布时间】:2022-10-25 13:48:18
【问题描述】:
设想
(1) 我的流程有常量 JName = "jobName"。
(2) 进程启动并写入注册表 [Key = Pjob, Vlaue = "jobName"],如果这些值尚不存在。 [这样做是为了让机器上的另一个名为 R 的进程定期查找名为“jobName”的作业对象,并将某些作业内存限制应用于该作业,如果尚未完成的话]
(3) 进程创建一个名为“jobName”的作业对象,
(4) Process 将当前进程分配给jobName。
假设我们从进程 P 开始,它经过 (1),(2),(3),(4) 然后崩溃。 该进程被服务结构唤醒为 P1 并尝试通过 (1) (2) (3) (4)
在 (3) 处,当 P1 尝试创建一个名为 jobName 的作业对象时,我相信它实际上是在取回 P 创建的作业的现有句柄。
'如果对象在函数调用之前已经存在,则函数返回现有作业对象的句柄'
在 (4) 此时将 p1 分配给作业对象失败并出现以下错误
Unhandled exception: System.ComponentModel.Win32Exception (5): Access is denied.
at Win32Wrappers.AssignProcessToJobObject(IntPtr jobHandle, IntPtr processHandle) in \Win32Wrapperscs.cs:line 100
JobObjectUtils.CreateJobObject() in
JobObjectUtils.cs:line 28
at Program.Main(String[] args) in Program.cs:line 98
问题:
如何在 P1 运行时清理 P 创建的旧作业对象并从新的作业对象开始? [作业对象的名称必须保持不变]
【问题讨论】:
-
你试过TerminateJobObject吗?
标签: winapi