2010-02-09 55 views
2

有沒有某種方式可以從一個進程中以非提升的方式啓動進程。我的安裝程序啓動時升級,當它完成時,它將啓動主應用程序。由於設置被提升,主流程也將被提升,這是不可取的。什麼是最好的解決方案?正常情況下從一個進程中執行進程

+0

這是http://stackoverflow.com/questions/2206646/create-a-process-with-ordinary-rights-from-an-administrator-process的副本。 – 2010-02-16 03:52:08

回答

2

這是一個問題,Vista/Win7似乎沒有API來獲取您需要調用CreateProcessAsUser()的非特權用戶令牌。我發現的唯一解決方案是使用任務計劃程序啓動程序。這並不意味着我很實際。

一個簡單的解決方案,跳轉到頭腦是使用一個小的非高架輔助進程。它可以反過來啓動提升的設置過程,並等待來自該設備的確認,以啓動未升高的設置。握手很簡單,可以通過命名互斥鎖來完成。

0

這樣做沒有破解的唯一方法是有兩個進程(可在同一個.exe文件來實現)

實例A用ShellExecute API和運行方式開始動詞實例B。 B在安裝過程中,當它在「完成頁面」上啓動應用程序時,它使用某種形式的進程間通信(RPC,共享內存+事件等),告訴它以其名義啓動進程。

0

這似乎是一個很好的方式來做到這一點,只要你不關心殼牌沒有運行的情況(例如可能一些終端服務應用程序的設置,雖然我不確定):

http://brandonlive.com/2008/04/27/getting-the-shell-to-run-an-application-for-you-part-2-how/

它得到一個接口,Explorer.exe的,應在用戶的正常範圍內運行,並詢問Explorer在代表其執行的命令。這隻需使用簡單的文檔化的COM接口即可完成,而不必混淆過程令牌或代碼/ DLL注入。

相關問題