為什么簡單的控制臺應用程式需要管理權限?
program LTUpdate;
{$APPTYPE CONSOLE}
begin
WriteLn('Hello World');
end.
- 如果我從命令提示符運行該程式,則不會發生任何事情。
- 如果我以管理權限運行命令提示符,然后該程式輸出:
你好世界
專案中是否有一個復選框將應用程式設定為需要管理權限?
(最終程式將連接到資料庫,獲取一些欄位并在其他地方更新,現在我可以通過 VCL 來完成......但我想這次我會嘗試一個簡單的控制臺應用程式。)
uj5u.com熱心網友回復:
您的應用程式正在編譯為 32 位,并且缺少包含requestedExecutionLevel值的 UAC 清單,因此 UAC 的“安裝程式檢測”功能啟動,這就是您的應用程式需要提升的原因:
https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/how-user-account-control-works
安裝程式檢測技術
安裝程式是旨在部署軟體的應用程式。大多數安裝程式會寫入系統目錄和注冊表項。這些受保護的系統位置通常只能由安裝程式檢測技術中的管理員寫入,這意味著標準用戶沒有足夠的訪問權限來安裝程式。Windows 10 和 Windows 11 啟發式檢測安裝程式并請求管理員憑據或管理員用戶的批準,以便以訪問權限運行。Windows 10 和 Windows 11 還會啟發式檢測卸載應用程式的更新和程式。UAC 的設計目標之一是防止安裝在用戶不知情和同意的情況下運行,因為安裝程式會寫入檔案系統和注冊表的受保護區域。
安裝程式檢測僅適用于:
- 32 位可執行檔案。
- 沒有請求的執行級別屬性的應用程式。
- 在啟用 UAC 的情況下以標準用戶身份運行的互動式行程。
在創建 32 位行程之前,會檢查以下屬性以確定它是否是安裝程式:
- 檔案名包含諸如“安裝”、“設定”或“更新”之類的關鍵字。
- “版本控制資源欄位包含以下關鍵字:供應商、公司名稱、產品名稱、檔案描述、原始檔案名、內部名稱和匯出名稱。
- 并行清單中的關鍵字嵌入在可執行檔案中。
- 特定 StringTable 條目中的關鍵字鏈接在可執行檔案中。
- 資源腳本資料中的關鍵屬性鏈接在可執行檔案中。
- 可執行檔案中有目標位元組序列。
解決此問題的最簡單方法是將 UAC 清單添加到您的應用程式以指定執行級別:
- 轉到“專案選項|應用程式|清單”
- 啟用“自動生成”
- 根據需要設定“執行級別”(在這種情況下,“作為呼叫者”就足夠了)。
否則,您將不得不將您的應用程式重新編譯為 64 位,或者更改其名稱和版本資源以避免指定的關鍵字。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/464439.html
下一篇:不使用應用時發送通知?
