由具有管理权限的服务提供服务或启动程序

时间:2011-09-13 09:52:11

标签: windows service uac rights

为了更新我们的软件,我们使用了VB6更新程序,具有更新级别和不同的更新源。它将必要的文件从更新源复制到本地目标(C:\ program files \ company \ product)。

VB6程序只能作为服务与服务助手(srvany或类似程序)一起运行,并且没有足够的权限来更改或添加给定文件夹中的新文件。但是,即使是.NET程序也没有必要的权限,只有在服务上设置管理员凭据时才会这样做。

如果客户端不使用管理员凭据设置服务,我们如何使用服务调用的服务或程序来更改给定文件夹中的文件,这意味着它具有管理权限。

由于给定的更新级别(具有不同程序和报告版本的不同用户),因此无法使用MSI / MSP。

我们试图通过C#.NET服务调用外部程序,但没办法...... 我们检查了一些带有清单文件的tipps和技巧,或者想要创建一个可以拥有管理权限的COM对象,但我认为这是错误的方法。

另一种可能性是通过提供“最高限度”来创建计划任务。但这有用吗?如果任务应在登录后运行且不同的用户可以使用此计算机,则应为每个用户定义任务...我们不知道客户端计算机上的每次登录,因为它们经常更改。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

要启动升级的东西,您需要一个作为本地系统运行的服务,以便它具有访问程序文件所需的权限。然而,服务总是运行,并记忆。

您可以创建一个在一段时间后开始的计划任务。但是,我不确定是否可以在没有UAC确认的情况下运行任务。

清单还应允许您启动另一个提升的应用程序。


基本上你的更新程序不需要提升:它可以将更新文件下载到每个用户可写的ProgramData。下载完成后,它将启动需要管理权限的安装程序。

Firefox使用自动更新机制:当它下载较新版本时,会提示提升以应用更新。

Apple Quicktime使用计划任务启动更新程序。它提供了用户可以选择要安装的更新的界面。它会下载更新文件,提示提升,然后应用更新。

如果您不想进行任何用户互动,那么服务是最好的选择。