簡體   English   中英

等待ShellExecuteEx(在Windows進程上設置訪問權限)

[英]Waiting for ShellExecuteEx (Setting access rights on Windows process)

我在C ++程序中使用ShellExecuteEx函數來啟動Uninstall.lnk文件。 在我的程序中,我想等待卸載程序完成。 我的第一次嘗試是在SHELLEXECUTEINFO結構中設置SEE_MASK_NOCLOSEPROCESS標志,然后在傳遞給ShellExecuteExSHELLEXECUTEINFO結構中的hProcess句柄上調用WaitForSingleObject ,但這似乎仍然過早地返回。

我當前的懷疑是,這是因為ShellExecuteEx啟動的進程(它是否啟動了一個新的shell?)會創建新的子進程,但不會等待它們。 因此,我正在嘗試創建一個“等待我的子進程及其啟動的所有子進程”功能。 為此,我正在嘗試使用作業對象。

我使用CreateJobObject創建了一個作業對象,將ShellExecuteEx返回的進程句柄分配給作業,然后嘗試等待作業對象。 不幸的是,將進程分配給作業失敗了,我認為這是由於訪問權限不足。

有沒有人知道如何在進程句柄上設置PROCESS_SET_QUOTA和PROCESS_TERMINATE訪問權限( AssignProcessToJobObject需要成功,根據MSDN),或者等待ShellExecuteEx啟動的進程完成的另一種方法?

更新:我應該指出,我也在推出其他應用程序,而不僅僅是Uninstall.lnk 其中一個是例如ClickOnce應用程序,它實際上是一個文件擴展名為.application的簡單XML文件。

Vista使用作業對象來啟動鏈接。 因此,您可能已經分配了嘗試分配給另一個作業對象的進程。

見: 這個問題

為什么不執行目標文件而不是打開Uninstall.lnk 您可以使用IShellLink獲取快捷方式目標。 然后,您將能夠使用SEE_MASK_NOCLOSEPROCESS標志通過ShellExecuteEx執行目標文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM