在从网络共享运行的应用程序的UAC提升提示中显示应用程序图标

12

我已经使用应用程序清单配置了我的.NET应用程序,以请求管理员权限。我还使用signtool签名程序集。一切都很好——当您启动应用程序时,会出现漂亮的UAC提示,显示应用程序名称和签名证书的名称。

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

3个回答

3

我可能找到了答案。

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

正如我们所知道的,服务运行在SYSTEM帐户上(还有其他几个帐户)。这意味着它需要SYSTEM对我们要启动的可执行文件拥有权限。我仅将安全性分配给了我自己(剥离了SYSTEM)。

只要我赋予SYSTEM权限(仅限读取权限!),并启动应用程序-它就显示了应用程序图标!


同样的问题:安装程序在受保护的文件夹中,只能被持续集成服务访问... - Christopher Oezbek

1

这可能与以下问题有关:为什么我的.NET应用程序在从网络驱动器运行时会崩溃?

你的 .net 应用程序在网络共享上可能具有其他权限,而不是在本地磁盘上。 更新到 3.5 SP1 通常会解决此问题。否则,请检查 .net 的远程代码策略。

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


我确实不得不为所有用户机器打补丁,将其升级到3.5 SP1版本,才能从网络共享中启动该应用程序。我刚刚尝试了您的建议,从共享中运行procmon,但是出现了相同的情况,即显示通用图标。因此,这似乎可能是Windows的限制? - Will Rogers
这可能是UAC的一个特性,或者是策略的原因?我刚试过了,确实,在网络位置上的UAC没有显示正常的图标。 - Davy Landman

1

显然这不是与 .net 有关,而是与 UAC 有关。

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

也许与切换到提升的会话时使用另一个用户有关。网络映射是在一般用户上完成的,因此在提升的会话中找不到应用程序,因此无法显示图标?

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

  • 启动提升的命令提示符
  • net use \\your-network-location\share /user:<username> <password>
  • 现在转到开始->运行并启动 \\your-network-location\share\procmon.exe(为了安全起见,请避免映射驱动器),看看 UAC 提示是否改善?

这个过程似乎没有任何区别。 - Will Rogers

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接