2017-04-13 133 views
0

我刚刚开发了一个.NET程序,该程序可以自行修补。使用UAC进行权限提升

我注意到,修补程序只在我选择“以管理员身份运行”时才会运行。

看来我需要“创建和使嵌入的应用程序清单”,根据这个本:

https://msdn.microsoft.com/en-us/library/bb756929.aspx

所以我的问题:

这是正常的像我这样的应用程序(它可以修补他们自己)要求管理员权利,这是我应该去的路线吗?

感谢

+0

这是为什么用NSIS标记? – Anders

回答

0

编辑的NSIS脚本以包括此行:

AccessControl::GrantOnFile \"$INSTDIR" "(S-1-5-32-545)" "FullAccess" 

这给了用户帐户完全访问Program Files文件中的应用程序文件夹,这意味着我的修补可以写它没有任何问题。

+0

这违背了所有安全最佳实践,只有管理员应该能够修改共享可执行文件。 – Anders

+0

它似乎是行业巨头们使用的方法(Epic Games,Steam,Battle.net)。 –

+0

我以为Steam使用了一项服务?您可以尝试运行Windows徽标测试,我相信它会将漫不经心的ACL检测为问题。 – Anders

0

如果您的应用程序通常不需要抬高话,我不建议你要求它在你的清单,因为这将是你的用户很讨厌。 Firefox使用NT服务来绕过UAC对话框,但我不能真正推荐,除非您的更新非常频繁。

我建议你写一个修补程序的小更新应用程序。它可以在其清单中请求提升,并且这样用户只有在需要修补时才能提升。如果您不想在您的软件包中包含其他.exe文件,则可以在需要修补时使用runas verb再次执行自己的操作。

+0

目前,它的工作方式是Patcher是一个每次运行程序时都会首先运行的exe文件。 Patcher下载版本文件并检查当前下载的版本是否与文件中的内容相同。如果不是,那么它会继续进行修补,如果它是这样的话,那么只需要执行主要的可执行文件。所以Patcher每次都会运行,我想我会在Patcher上放一个清单呢?这是否意味着每次都需要批准?或者UAC会记住用户批准它 –

+0

这意味着您每次都会收到UAC对话框。检查您的主应用程序的更新,只有在有补丁的时候才启动修补程序。 – Anders

+0

我设法改变NSIS脚本,让“用户”可以在程序文件中写入我的应用程序文件夹,这就解决了这个问题。 –