我表現我的可執行文件需要管理員:正在從臨時文件夾運行簽名和RequireAdministrator可執行文件?
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<!-- Disable Windows Vista UAC compatability heuristics -->
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
然後我經過數字簽名的。
但後來當我跑我發現了一些奇怪的可執行文件:在同意對話框,從中PingWarning.exe
變更爲pinxxxx.tmp
可執行文件的名稱;彷彿一個臨時副本作出的,而正在運行:
alt text http://i42.tinypic.com/nmkppz.jpg
我翻出過程Montior,看看是否有人正在創造一個* .TMP文件當我啓動我的可執行文件,並有是:
alt text http://i42.tinypic.com/10o1b8g.jpg
這個特定svchost
容器內的應用信息服務是有意將我的可執行文件複製到Windows臨時文件夾,並從那裏詢問用戶「同意書」;給一個無效的文件名。
一旦同意被授予,可執行從其原始位置運行: link text http://i43.tinypic.com/104noub.jpg
的文件不會被複制到臨時文件夾,如果我不進行數字簽名:
alt text http://i43.tinypic.com/14kvevd.jpg
所以我的問題是無效文件名出現在同意對話當我數字簽字我的可執行文件已經表現爲requireAdministrator
。
什麼?
更新:
的最接近的解釋我能找到來自Uninformed.org(http://uninformed.org/index.cgi?v=8&a=6&p=3):
在啓動請求的一個 程序請求uiaccess的情況下, appinfo!RAiLaunchAdminProcess is called to service the request。 過程然後通過 appinfo!AiCheckSecureApplicationDirectory驗證爲 允許的 目錄的(硬編碼)集合。 驗證該程序是從 目錄中啓動的 ,控制權最終是 傳遞給appinfo!AiLaunchProcess 其中執行剩餘工作 需要服務發起 請求。此時,由於 任何的 的「安全」的應用程序目錄 的要求,這是不可能的 受限用戶(或 低完整性運行的用戶,對於這個問題),以 地方自定義的可執行文件「安全」應用程序目錄。
該提示在於有一些(無證,未指定的)硬編碼,一個應用程序被「允許」的路徑位於。
另一種是爲用於請求uiaccess的程序。在我的情況下,我的原始清單中沒有uiAccess="false"
。但改變清單包括無UI訪問:
但是這並沒有解決原來的問題。
更新二:
從MSDN():
重要
應用程序設置爲true必須 驗證碼的 uiAccess標誌簽署正常啓動。 此外,應用程序必須 駐留在 文件系統中的受保護位置。 \ Program Files \和\ windows \ system32 \
目前是兩個允許的受保護位置。
這似乎是備份了請求uiAccess
的可執行文件必須位於允許位置的概念;除非我不要求uiAccess。