2010-03-05 30 views
1

在旨在建立一個互聯網的軟件更新服務,爲我的軟件Delphi應用程序,Windows 7的UAC系統請求授權,用戶運行exe.The以下可能有爭議/風險領域中的代碼存在:如何確定調用用戶訪問控制限制的內容?

  • 命名管道服務器通信
  • TCP用於FTP和HTTP創建
  • SHGetSpecialFolderPath API調用用於

這些項目其中加入UAC沒有激活之前,除去每個在T包括所有單元引用在內的所有單元,然後以裸露的骨骼exe結尾仍然會導致UAC事件 - 所以不可能說出是什麼原因造成的。在此之上,Delphi 2007現在需要以管理員身份啓動,以啓動應用程序的調試過程。

問題1:如何查看是什麼原因造成這種從頭除了開始在一個新的EXE - 督察是有記錄的地方,我可以檢查

問題2:將用簽名的exe文件使用驗證碼仍然會造成UAC警報顯示

回答

7

UAC不會啓動,因爲您的應用程序執行某些管理操作。許多人認爲,如果一個不升級的應用試圖做出[失敗並且升級失敗的事情],UAC會詢問升級。但事實並非如此。你的應用開始升高或不升級,並保持這種狀態。如果它試圖在沒有提升的情況下做失敗的事情,那麼事情就會失敗。這就是添加和刪除代碼「仍然導致UAC事件」的原因。

什麼真正「導致UAC事件」是你的exe的屬性,而不是它包含的代碼。這些包括它的名稱,故意對它應用的兼容性內容(通過右鍵單擊並檢查某些選項)以及系統爲您提供的兼容性內容(通常在其中一個「此應用程序可能沒有正確運行」對話框之後)。人們經常發現它確定哪些是造成它非常令人沮喪

開始通過重命名的exe,避免像設置和更新的話你不需要運行它,順便說一句 - 只要找一個盾覆蓋在Windows資源管理器的圖標。(見http://www.gregcons.com/KateBlog/NamingMattersAnotherCauseOfTheOverlayIcon.aspx)還可以右鍵單擊它並選擇屬性,然後再看兼容性選項卡。你可能會問它提升那裏。

+0

這是正確的 - 有一些啓發式的工作。更多細節在這裏http://msdn.microsoft.com/en-us/magazine/cc163486.aspx – MX4399

+1

我應該指出,如果你有一個asInvoker清單,啓發式被抑制。好點的亞歷山大。 –

3

我想你問錯了問題。

您不需要與UAC及其啓發式對抗。它們是舊應用程序的兼容性黑客,而不是新的。新應用程序必須遵循規則。

包括manifest with "asInvoker" execution level - 你完成了。簡單和100%有效。