安装程序与Windows应用程序联机注册

我们使用Visual Studio 2013在vb.net中开发了一个软件。现在我们要构build一个自定义安装程序,其步骤如下:

  1. 用户开始安装我们的软件。
  2. 在“input串行密钥”选项中,用户input我们提供的16位串行。
  3. 点击“确定”button后,我们的软件连接到我们的IP,并将串行密钥和其他用户的信息保存到我们的数据库。
  4. 确认密钥返回到我们的软件。
  5. 软件写入一个文件并将其保存到系统文件夹。

这几乎就像Adobe或Corel注册过程。 我们也接受其他技术,必须确保我们的软件只能安装在一台机器上。 请注意,我们是一群新手程序员(不太高级),所以; 如果这个过程被详细阐述,那对我们将会非常有帮助。

我会从设置中删除所有的许可function,并将其添加到应用程序 。 你的安装程序仍然可以通过将它传递给msiexec.exe作为公共属性 – 大写属性(或者通过使用转换来应用串行属性来“隐藏”一些东西 – 它具有与在命令行上设置属性的效果完全一样)。 您也可以在交互式运行时在设置中的对话框中设置LICENSE属性 ,但我最喜欢的方法是允许在静默部署模式下将未validation的许可证密钥添加到registry中,并直接在应用程序中input许可证密钥而不是用于交互式部署的设置(以上描述用于无提示部署):

msiexec.exe /I "C:\Install.msi" /QN /L*V "C:\msilog.log" LICENSE="123-456-789" 
  • 这将允许将许可证轻松添加到企业部署scheme中的每台计算机上。 许可证值只是写入磁盘或registry而无需validation。 该应用程序将validation它(比安装validationDLL更安全)。
  • 没有必要混淆任何复杂的设置对话框 ,但是您需要在应用程序中使用许可证对话框,如下所述。
  • 几乎所有大公司都默默地部署MSI文件 ,所以安装GUI在大多数时候都会被忽略。 如果您在设置中处理许可证,那么您只是增加风险和浪费资源
  • 一个缺点 :安装后,应用程序以非pipe理员身份运行,无法写入HKLM以在计算机上的所有用户之间共享串行(使用提升权限运行的设置可以)。 它必须写入HKCU,或者安装程序必须已经准备好写入访问registry中的特定HKLM位置以供应用程序写入。 我更喜欢为每个用户写信给HKCU,因为许可证因此不太容易被别人复制,并且保留为用户特定的数据(允许漫游,虽然这是大多数IT专业人员的讨厌特性)。 但是,由应用程序编写的HKLM许可证密钥或安装期间的设置(如上面的公共属性集所解释的)允许所有用户在启动应用程序时共享许可证。

有几个更具体的原因,以保持您的设置许可证处理和validation:

  • 大量的支持请求总是由在设置中注册其许可证密钥时出现问题的人员产生的。 一个设置运行一次,如果有问题,应用程序可以重新启动 。 对于没有经验的用户来说,这比你想象的更重要。 您还可以使用更好的function来处理exception和错误情况,以及应用程序中可能出现的任何意外问题。
  • 在安装程序中的串行validation暴露了一个很容易被海盗破解的validationDLL /方法。 您不会通过从您的设置中删除盗版来防止盗版 ,但至less您会使其更加困难。 如果你隐藏了一些东西(静态链接,encryption,混淆,validation过程在线,和/或任何我不熟悉的安全专业人员所做的),它在应用程序中更安全。
  • 如果安装程序需要支持应用程序试用版本,则应该允许用户在购买产品时input许可证密钥 – 最好不必重新运行安装程序或卸载/重新安装只是添加许可证密钥。 换句话说,无论如何,您可能需要在应用程序中处理许可为什么您的设置也会变得复杂?
  • 如果您的应用程序使用不同的版本运行,那么用户购买升级的许可证会怎样? 他们应该只是能够进入许可证对话框,并在可能的情况下解锁function,而不是卸载并重新安装所有涉及的克隆。 对于某些升级,这很难实现,而且您通常会针对不同的版本进行单独的设置。
  • 如果networking正在使用代理服务器进行Internet访问 ,则在安装过程中(通常由市场营销人员要求),您将在通过Internet注册许可证时遇到问题。 你有更多的function来检查和处理在应用程序中 – 它可以再试一次,并等待访问(如果可能的话,一般你挂钩到IE的自动代理configuration)。 对于公司部署,您还需要一个静默安装选项,它不会validation密钥,而只是将其写入registry。 试图从MSI的静默安装访问互联网在我看来是一个相当极端的部署反模式 。 我发现它在设置GUI中也是可疑的。 在应用程序中进行注册 – 争议less得多,并且您可以设置防火墙规则以允许其访问Internet(msiexec.exe可能被阻止 – 并且是有原因的)。 还可能有硬件防火墙和/或安全软件来处理,这使得互联网访问困难,甚至不可能没有一些笨重的pipe理服务器configuration。 这可能会导致您的软件无法正常使用,因为我的经验是:“ 只要从我们的networking和应用程序中获得这个权利,就必须有更好的select ”。
    • 更新随着部署技术日趋成熟并变得更“基于互联网”,这个“真相”可能会改变,我们可以通过专门为通过在线“存储库”运行的部署进行“在线”的一切工作。 我们将不得不等着看。 现在我的意见是,任何设置互联网访问要求是错误的,不可取的。
  • 与许可证混淆的设置有时会导致在升级修补迁移场景中删除许可证数据,这是由于安装程序中的错误。 有时候这比你想象的要严重得多 – 这个软件包可能会打到大公司的数千个工作站,而且要修复起来很麻烦。
  • 许可证是一个巨大的企业头痛 – 通常公司或公司所期望的是许可证是在服务器上集中pipe理的,而不是基于文本序列号(例如通过networking启动应用程序时获得的并发或浮动许可证) 。 只是提到这一点,虽然这是一个超出范围的问题。 在这些情况下,您在安装过程中指定的通常是指向许可证服务器的IP地址,或者是由WINSDNSparsing的常规主机名。

正如您可能已经猜到的,Windows Installer不提供任何用于处理授权的开箱即用function。 但是,有商业许可解决scheme,你可以去负担得起的。

  1. LogicNP
  2. DESAWARE

由于这是非常广泛的问题难以解释低级别的实现细节。 我可以给你一个方向。

首先,您需要一个自定义用户界面,用户可以在其中键入许可证/激活密钥。 有一些方法可以把自定义的UI整合到windows安装程序中,我已经在SO中解释了几个方法,参考下面的线程。

  • 在安装期间显示自定义窗体
  • 如何添加额外的自定义窗口到VS安装项目UIstream

通过遵循上述方法,您应该能够添加一个用户将键入一个键的用户界面。 一旦用户添加了密钥,他将按下自定义UI上的激活button,button单击事件处理程序将调用必要的逻辑来插入/validation用户input的激活密钥。

也许你可以尝试免费(甚至开源)安装系统的Inno Setup。

这是基于脚本,可以让你调整你的安装程序,并执行它的一切!

使用input序列号创build自定义页面非常简单,请参阅以下示例: Inno Setup中的序列号CustomPage

还有Visual Studio的集成。