2016-05-04 45 views
0

我有一個用於某種用途的命令行實用程序。我使用ShellExecuteEx函數從COM DLL啓動此實用程序。當調用ShellExecuteEx時,我將lpVerb參數指定爲「runas」,以便該實用程序開始提升。我在啓動時從exe客戶端調用COM接口函數。所以當我啓動客戶端exe時,該實用程序也會啓動。我的問題是,因爲實用程序開始提升,它總是要求UAC確認提示。我無法忍受這一點,因爲在這個過程中不會有人工干預。所以我需要啓動該實用程序而不顯示UAC提示符,但在啓動客戶端exe時仍然提升。有什麼辦法可以做到這一點?我希望在實用程序本身內完成一些更改,如更改清單文件而不是某些系統設置更改。任何幫助將不勝感激..如何禁用特定應用程序的UAC提示

回答

0

這是不可能的,你描述的方式(明顯改變),因爲這會打敗UAC的目的。

但是,您可以使用計劃任務。這樣,只需要一次用戶交互提升(創建任務時)。

看看我在這裏給出了答案:https://stackoverflow.com/a/36838171/1871033

你可以這樣做,但沒有登錄觸發器。所以你將有一個計劃任務,它不會自行運行,但它存在。然後,您可以在沒有提升的情況下使用schtasks.exe /run /tn YourTaskName以提升特權運行任務。

+0

但我使用ShellExecuteEx從COM DLL啓動應用程序。它是一個命令行實用程序,也需要一些參數。我在ShellExecuteEx中傳遞這些參數。如果我添加計劃任務,是否可以使用相同的機制?我的意思是,而不是調用ShellExecuteEx我應該能夠從我的COM DLL觸發任務。也可以通過指定命令行參數。然後等待應用程序退出(任務完成),然後繼續。是否可以編程?如果是的話,請你提供一些有關這方面的信息。 – Partha

+0

哦,我明白了......如果你需要在運行時傳遞命令行參數,那麼這個功能就不能用。你需要編寫一個特殊的工具作爲一個包裝器,例如通過命名管道接受輸入,或者從文本文件中定義的地方讀取它 - 甚至可以是你通過'cmd/c'調用的批處理腳本計劃任務(在這兩種情況下,您都必須小心謹慎,以便清理輸入以確保不會引入任何特權升級漏洞),或者研究編寫服務。但這不是直接的方式。 – CherryDT

+0

我特別需要禁用UAC通知,因爲我的實用程序應用程序應該在服務器上啓動,在那裏不會有任何用戶交互。但我仍然需要管理員權限。我想知道是否沒有這樣的情況下,窗口中的應用程序必須在具有管理員權限的轉儲(非交互式)服務器中啓動?在這種情況下,那裏使用的機制是什麼?我真的希望可能有解決方案,因爲上述場景可能是許多人的需求 – Partha

相關問題