我表现我的可执行文件需要管理员:正在从临时文件夹运行签名和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。