2010-10-23 69 views
1

我在客户端的多个机器上安装了软件产品。该软件访问位于服务器上的数据库。如何防止过度安装软件

我给了他们一个MSI,以便他们可以在其他机器上安装软件,如果需要的话。

如何以编程方式限制可安装软件的计算机数量?

该软件以前在HKLM注册表项中放置了一个值,但Vista和Win 7不允许HKLM密钥被写入,所以我现在如何监视安装?

+0

您如何知道软件是否安装?如果他们重新映像硬盘驱动器,或者从一台或两台计算机上卸载它,或者使用您的程序克隆虚拟磁盘,该怎么办?当程序“电话回家”访问服务器上的数据库时,它只是计数吗?你可以有多个dbs,一些客户使用一个,一些客户使用另一个客户?当您谈论跟踪软件问题时,首先想到的就是这些问题。 – 2010-10-23 04:51:06

+0

@JohnK:当应用程序启动时,它将检查HKLM注册表项的工作站ID,如果找不到将被分配。这些工作站ID的列表存储在数据库中。如果列表已经处于定义的限制,则不会分配进一步的工作站ID。 – 2010-10-23 05:12:12

+0

@JohnK:但Vista和Win 7不允许应用程序写入HKLM注册表项,所以目前的机制需要重新编写,但是如何? – 2010-10-23 05:59:32

回答

1

有像赛门铁克客户端管理套件和服务器管理套件这样的产品,可以让您通过网络对所有软件进行软件许可证管理。见here。虽然,恐怕他们是企业产品,可能会以这种方式付出代价。我实际上已经在开发他们两个。

1

您可能应该让您的传统应用程序UAC知道(例如Microsoft instruction for application developers on VistaCode Project tutorial)并要求其特殊权限以继续使用HKLM或同等服务。一旦您的程序具有适当的权限(例如管理员),它应该能够继续在UAC环境中运行,就像它在传统Windows中一样。

一个副作用是非管理员将无法正确安装您的程序,但这在Windows Vista的“新世界”7中并不常见,并且前进的一切都是如此。它看起来像“每个人都是管理员”的理念不会回来。 (注意:我使用术语“管理员权限”,但表示无论您是完成工作所需的最低权限)。

有可能会需要一点的工作,当我看到告诫像这样的报价:

周边 安装

提升过程有点复杂,何去何从 到细节,但被警告 是 需要管理员标志一个MSI包实际上并没有 提供完整的管理员 权限。这实际上的行为 略有不同,并作为 子集的完整权限运行,除非您使用引导程序 获得完整的 海拔。很少有安装程序 需要这些额外的令牌 ,因为安装程序的管理员权限通常是足够的。

好处是一旦您转换了一个应用程序,您将拥有相应的知识和代码库来升级其他程序。

我相信其他人会建议代码解决方法,这是令人满意的,可能不会使用HKLM。