0

我一直在使用 Installshield 2009 和 C# 来创建一个安装项目,该项目在安装之前验证序列密钥(用 .NET 编写的算法)。它工作得很好。

但是我有几个版本的产品。目前,我为每个版本使用单独的设置项目。然而,许多文件是相同的,只有包含或不包含文件的微小变化。如果我可以有一个单独的部署项目来安装某些文件,这取决于检测到的有效序列号,我会很高兴的。

基本上我想知道Installshield是否可以实现这种事情。

提前致谢

4

2 回答 2

1

Windows Installer 不太适合您描述的场景,至少除非您花时间通过某种许可技术来防止使用不正确安装的文件。您可以让您的串行验证 dll 还设置一个属性,以适应各种功能或组件,但是转换可以轻松地避开这一点。除非您已经(或可以)花时间实施许可证验证,否则最好的选择是维护单独的构建(每个不同的允许文件集一个)。但是,您可以将它们合并到一个项目中。

根据构建之间的确切差异,我认为有两种互补的方法可以为您提供单独的 SKU。第一个最容易在每个版本的基础上指定,您可以选择要构建的版本,例如从命令行。第二个与发布无关,可以手动更新,也可以在命令行构建中覆盖。

  1. 释放标志

    您可以将项目组分成额外的功能(可能是隐藏的,以免使功能选择对话框混乱),然后在每个版本上使用发布标志在构建时包含或排除这些文件。如果您要更改内容文件,这可能会最有效,但在不同的 SKU 中继续使用相同的自定义操作 DLL。

  2. 路径变量

    可以使用路径变量指定自定义操作 DLL 的路径,然后您可以使用该变量来覆盖文件的源位置。确保相应的条目(可能在文件或二进制表中)在尖括号中使用其自己的变量,然后您也可以在构建时单独交换它。如果您需要更改自定义操作 DLL,这很有意义,并且可以与 Release Flags 一起使用。

于 2009-10-02T14:00:51.087 回答
0

您可以在运行时添加和删除功能。这可以通过 (a) 安装程序属性或 (b) 在安装屏蔽脚本中完成。

首先,您要将所有版本的所有功能添加到项目中。您将确保未选择安装它们。然后,您将在运行时使用方法 a 或 b 选择一个。

安装程序属性 (a) 可以通过多种方式设置。命令行切换到安装程序、操作系统版本、存在的某些注册键,或通过 DLL 中的自定义逻辑。并且可以基于安装程序属性是特定值来包含/排除功能。

至于(b),脚本可以访问“特征树”,并且可以使用 FeatureSelectItem() 等基于自定义逻辑选择和取消选择它们

于 2009-12-12T22:00:48.587 回答