我已经使用应用程序清单配置了我的.NET应用程序,以请求管理员权限。我还使用signtool签名程序集。一切都很好——当您启动应用程序时,会出现漂亮的UAC提示,显示应用程序名称和签名证书的名称。
然而,当我从网络共享运行应用程序时,升级提示显示通用的可执行文件图标,而不是我的应用程序图标。如何使UAC提示显示我的应用程序图标?
我已经使用应用程序清单配置了我的.NET应用程序,以请求管理员权限。我还使用signtool签名程序集。一切都很好——当您启动应用程序时,会出现漂亮的UAC提示,显示应用程序名称和签名证书的名称。
然而,当我从网络共享运行应用程序时,升级提示显示通用的可执行文件图标,而不是我的应用程序图标。如何使UAC提示显示我的应用程序图标?
我可能找到了答案。
UAC是在服务之上运行的,我们看到的对话框是在桌面快照之上。该服务将只显示对话框,就像它在桌面上一样。
正如我们所知道的,服务运行在SYSTEM帐户上(还有其他几个帐户)。这意味着它需要SYSTEM对我们要启动的可执行文件拥有权限。我仅将安全性分配给了我自己(剥离了SYSTEM)。
只要我赋予SYSTEM权限(仅限读取权限!),并启动应用程序-它就显示了应用程序图标!
这可能与以下问题有关:为什么我的.NET应用程序在从网络驱动器运行时会崩溃?
你的 .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 提示是否改善?