【发布时间】:2009-01-22 16:43:25
【问题描述】:
我已使用应用程序清单配置了我的 .NET 应用程序以请求管理员权限。我还使用 signtool 对程序集进行了签名。一切正常——当您启动应用程序时,您会收到带有应用程序名称和签名证书名称的漂亮 UAC 提示。
但是,当我从网络共享运行应用程序时,提升提示会显示通用可执行图标,而不是我的应用程序图标。如何让 UAC 提示显示我的应用程序图标?
【问题讨论】:
标签: .net windows-vista icons uac
我已使用应用程序清单配置了我的 .NET 应用程序以请求管理员权限。我还使用 signtool 对程序集进行了签名。一切正常——当您启动应用程序时,您会收到带有应用程序名称和签名证书名称的漂亮 UAC 提示。
但是,当我从网络共享运行应用程序时,提升提示会显示通用可执行图标,而不是我的应用程序图标。如何让 UAC 提示显示我的应用程序图标?
【问题讨论】:
标签: .net windows-vista icons uac
我可能发现了。
UAC 在服务之上运行,我们看到的对话框在桌面快照之上。该服务只会显示对话框,就好像它在桌面上一样。
正如我们所知,服务在 SYSTEM 帐户上运行(除其他外)。这意味着它需要 SYSTEM 对我们正在启动的可执行文件拥有权限。我只为自己分配了安全性(剥离了 SYSTEM)。
一旦我授予 SYSTEM 权限(仅限读取权限!)并启动应用程序 - 它就会显示应用程序图标!
【讨论】:
会不会和问题有关:Why does my .NET application crash when run from a network drive?
您的 .net 应用程序在网络共享上拥有除本地磁盘之外的其他权限。更新到 3.5 SP1 通常会消除此问题。否则,请检查 .net 的远程代码策略。
您也可以尝试其他非 .net 应用程序(例如 procmon),该应用程序需要提升才能将其放在同一目录中,然后看看会发生什么。
【讨论】:
显然这不是 .net 的东西,而是 UAC。
我通过将 systinternals 中的 procmon 放置在网络共享上来重现该行为,并看到了相同的差异。
当切换到使用另一个用户的提升会话时,可能与此有关。网络映射是在普通用户上完成的,所以在提升的会话中找不到应用程序,因此无法显示图标?
您可以尝试执行以下操作以强制连接在提升的会话中有效:
\\your-network-location\share /user:<username> <password>
\\your-network-location\share\procmon.exe(为了安全起见,请避免映射驱动器)并查看 UAC 提示是否有所改善?【讨论】: