0

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

VB6 程序只能使用服务助手(srvany 或类似的)作为服务运行,并且没有足够的权限在给定文件夹中更改或添加新文件。但即使是 .NET 程序也没有必要的权限来执行此操作,前提是您在服务上设置了管理员凭据。

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

由于给定的更新级别(具有不同程序和报告版本的不同用户),MSI/MSP 是不可能的。

我们试图从具有提升的 C#.NET 服务调用外部程序,但没有办法......我们检查了清单文件的一些提示和技巧,或者考虑制作一个可能具有管理权限的 COM 对象,但我认为这是错误的方法。

另一种可能性是通过给予“最高特权”来创建计划任务。但这行得通吗?如果任务应该在登录后运行并且不同的用户可以使用这台计算机,你应该为每个用户定义一个任务......我们不知道客户端计算机上的每个登录,因为它们经常变化。

有人可以帮忙吗?

4

1 回答 1

0

要启动提升的功能,您需要一个作为本地系统运行的服务,以便它具有访问程序文件所需的权限。然而服务总是运行,并占用内存。

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

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


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

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

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

如果您不希望任何用户交互,那么服务是最好的选择。

于 2011-09-16T17:17:23.963 回答