2010-05-13 83 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

一个朋友有一个模糊的记忆,这可能是一个 缓解了有关文件的关注,而信任对话框中被篡改 显示