我刚刚开发了一个.NET程序,该程序可以自行修补。使用UAC进行权限提升
我注意到,修补程序只在我选择“以管理员身份运行”时才会运行。
看来我需要“创建和使嵌入的应用程序清单”,根据这个本:
https://msdn.microsoft.com/en-us/library/bb756929.aspx
所以我的问题:
这是正常的像我这样的应用程序(它可以修补他们自己)要求管理员权利,这是我应该去的路线吗?
感谢
我刚刚开发了一个.NET程序,该程序可以自行修补。使用UAC进行权限提升
我注意到,修补程序只在我选择“以管理员身份运行”时才会运行。
看来我需要“创建和使嵌入的应用程序清单”,根据这个本:
https://msdn.microsoft.com/en-us/library/bb756929.aspx
所以我的问题:
这是正常的像我这样的应用程序(它可以修补他们自己)要求管理员权利,这是我应该去的路线吗?
感谢
编辑的NSIS脚本以包括此行:
AccessControl::GrantOnFile \"$INSTDIR" "(S-1-5-32-545)" "FullAccess"
这给了用户帐户完全访问Program Files文件中的应用程序文件夹,这意味着我的修补可以写它没有任何问题。
如果您的应用程序通常不需要抬高话,我不建议你要求它在你的清单,因为这将是你的用户很讨厌。 Firefox使用NT服务来绕过UAC对话框,但我不能真正推荐,除非您的更新非常频繁。
我建议你写一个修补程序的小更新应用程序。它可以在其清单中请求提升,并且这样用户只有在需要修补时才能提升。如果您不想在您的软件包中包含其他.exe文件,则可以在需要修补时使用runas
verb再次执行自己的操作。
目前,它的工作方式是Patcher是一个每次运行程序时都会首先运行的exe文件。 Patcher下载版本文件并检查当前下载的版本是否与文件中的内容相同。如果不是,那么它会继续进行修补,如果它是这样的话,那么只需要执行主要的可执行文件。所以Patcher每次都会运行,我想我会在Patcher上放一个清单呢?这是否意味着每次都需要批准?或者UAC会记住用户批准它 –
这意味着您每次都会收到UAC对话框。检查您的主应用程序的更新,只有在有补丁的时候才启动修补程序。 – Anders
我设法改变NSIS脚本,让“用户”可以在程序文件中写入我的应用程序文件夹,这就解决了这个问题。 –
这是为什么用NSIS标记? – Anders