2010-05-13 80 views
5

我表現我的可執行文件需要管理員:正在從臨時文件夾運行簽名和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.orghttp://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。

回答

2

我已經看到與未簽名應用程序相同的問題,特別是與NSIS和InnoSetup安裝程序(一個問題的一個位時1GB +安裝被複制到%WINDIR%\ temp中,然後通過掃描consent.exe)

的NSIS錯誤跟蹤器有關於它的entry。回想起當我調查這件事時,我曾與MS @ MS聯繫過,他們應該聯繫在UAC工作的人,但沒有真正出現。我從那次談話得到的唯一適用的信息是這樣的話:

在Windows

一個朋友有一個模糊的記憶,這可能是一個 緩解了有關文件的關注,而信任對話框中被篡改 顯示