Create a Job Object with CreateJobObject
. Use CreateProcess
to start UninstallA.exe
in a suspended state. Assign that new process to your job object with AssignProcessToJobObject
. Start UninstallA.exe running by calling ResumeThread
on the handle of the thread you got back from CreateProcess
.
Then the hard part: wait for the job object to complete its execution. Unfortunately, this is quite a bit more complex than anybody would reasonably hope for. The basic idea is that you create an I/O completion port, then you create the object object, associate it with the I/O completion port, and finally wait on the I/O completion port (getting its status with GetQueuedCompletionStatus
). Raymond Chen has a demonstration (and explanation of how this came about) on his blog.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…