在UAC提升上显示应用程序图标,以便从网络共享运行应用程序

时间:2009-01-22 16:43:26

标签: .net windows-vista icons uac

我已使用应用程序清单配置我的.NET应用程序以请求管理员权限。我还使用signtool签署了程序集。一切都很好 - 当你启动应用程序时,你会得到一个漂亮的UAC提示,其中包含应用程序的名称和签名证书的名称。

但是,当我从网络共享运行应用程序时,提升提示会显示通用可执行图标,而不是我的应用程序图标。如何让UAC提示显示我的应用程序的图标?

3 个答案:

答案 0 :(得分:3)

我可能已经发现了。

UAC运行在服务之上,我们看到的对话框位于桌面快照之上。该服务只会显示对话框,就像它在桌面上一样。

我们知道服务在SYSTEM帐户上运行(在其他几个帐户中)。这意味着它需要SYSTEM才能拥有我们正在启动的可执行文件的权限。我只为自己安排了安检(剥离了SYSTEM)。

一旦我授予SYSTEM权限(只读权限!),并启动了应用程序 - 它就会显示应用程序图标!

答案 1 :(得分:1)

是否与问题有关:Why does my .NET application crash when run from a network drive?

您的.net应用程序对网络共享具有与本地磁盘相同的其他权限。更新到3.5 SP1通常会删除此问题。否则,请检查.net。

的远程代码策略

此外,你可以尝试其他非.net应用程序(例如procmon),它需要提升才能将它放在同一个目录中,看看会发生什么。

答案 2 :(得分:1)

显然它不是.net的东西,而是UAC。

我通过将systinternals的procmon放在网络共享上来重现这种行为,并看到了相同的区别。

当切换到提升的会话时,可能会有一些事情要做,而另一个用户则被使用。网络映射是在普通用户上完成的,因此在提升的会话中找不到应用程序,因此无法显示图标?

您可以尝试执行以下操作以强制连接在提升的会话中有效:

  • 启动提升命令promt
  • net use \\your-network-location\share /user:<username> <password>
  • 现在转到start-&gt;运行并启动\\your-network-location\share\procmon.exe(为安全起见避免映射驱动器)并查看UAC提示是否有所改进?