gpt4 book ai didi

c++ - 等待 ShellExecuteEx(在 Windows 进程上设置访问权限)

转载 作者:可可西里 更新时间:2023-11-01 14:16:11 25 4
gpt4 key购买 nike

我在 C++ 程序中使用 ShellExecuteEx 函数来启动 Uninstall.lnk 文件。在我的程序中,我想等待卸载程序完成。我的第一次尝试是在 SHELLEXECUTEINFO 结构中设置 SEE_MASK_NOCLOSEPROCESS 标志,然后在可用的 hProcess 句柄上调用 WaitForSingleObject在传递给 ShellExecuteExSHELLEXECUTEINFO 结构中,但它似乎仍然返回得太早。

我目前的怀疑是,这是因为 ShellExecuteEx 启动的进程(它是否启动了一个新的 shell?)创建了新的子进程,但没有等待它们。所以我试图创建一个“等待我的子进程和它启动的所有子进程”的功能。为此,我正在尝试使用作业对象。

我使用 CreateJobObject 创建了一个作业对象,将 ShellExecuteEx 返回的进程句柄分配给该作业,然后尝试等待该作业对象。不幸的是,将进程分配给作业失败,我认为这是由于访问权限不足。

有没有人知道如何在进程句柄上设置 PROCESS_SET_QUOTA 和 PROCESS_TERMINATE 访问权限(根据 MSDN,这是 AssignProcessToJobObject 成功所必需的),或者其他等待进程启动的方法通过ShellExecuteEx来完成?

更新:我应该指出我还启动了其他应用程序,而不仅仅是 Uninstall.lnk。其中之一是例如一个ClickOnce应用程序,它实际上是一个简单的 XML 文件,文件扩展名为 .application

最佳答案

Vista 使用作业对象来启动链接。因此,您尝试分配给另一个作业对象的过程可能已经分配。

参见:this question

关于c++ - 等待 ShellExecuteEx(在 Windows 进程上设置访问权限),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1142253/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com