我表示我的可执行文件需要管理员:
然后我对它进行了数字签名.
但是当我运行可执行文件时,我注意到一些奇怪的东西:Consent对话框上的可执行文件的名称从更改PingWarning.exe
为pinxxxx.tmp
; 好像是临时副本,正在运行:
替代文字http://i42.tinypic.com/nmkppz.jpg
我挖出了Process Montior,看看是否有人在我启动可执行文件时创建一个*.tmp文件,并且:
alt text http://i42.tinypic.com/10o1b8g.jpg
此特定容器中的Application Information服务有意将我的可执行文件复制到Windows临时文件夹,并从那里请求用户"同意"; 提供无效的文件名.svchost
一旦获得同意,可执行文件将从其原始位置运行: 链接文本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来为请求提供服务.然后,该过程被appinfo!AiCheckSecureApplicationDirectory验证为在(硬编码的)允许目录集内 .在验证程序是从允许的目录中启动之后,控制最终会传递给appinfo!AiLaunchProcess ,它执行服务启动请求所需的剩余工作.此时,由于"安全"应用程序目录要求,有限用户(或运行具有低完整性的用户)不可能在任何"安全"应用程序目录中放置自定义可执行文件.
提示是一些(未记录的,未指定的)硬编码路径,应用程序被"允许"位于其中.
另一个是请求uiaccess的程序.就我而言uiAccess="false"
,我的原始清单中没有.但是更改清单以包含no ui访问:
但这并没有解决原来的问题.
更新二:
来自MSDN():
重要
的uiAccess标志设置为true的应用程序必须经过Authenticode签名才能正常启动.此外,应用程序必须位于文件系统中受保护的位置.\ Program Files \和\ windows\system32\
目前是两个允许的受保护位置.
这似乎可以替代请求的可执行文件uiAccess
必须位于允许的位置的概念; 除了我不要求uiAccess.