具有Windows应用程序在线注册的安装程序

Jer*_*nes 2 vb.net installer windows-installer wix visual-studio-2013

我们使用Visual Studio 2013在vb.net中开发了一个软件.现在我们要构建一个具有以下步骤/功能的自定义安装程序:

  1. 用户开始安装我们的软件.
  2. 在"输入串行密钥"选项中,用户输入我们提供的16位串口.
  3. 单击"确定"按钮后,我们的软件将连接到我们的IP并将串行密钥与其他用户的信息一起保存到我们的数据库中.
  4. 确认密钥将返回给我们的软件.
  5. 软件写入文件并将其保存到系统文件夹.

它几乎像Adobe或Corel注册过程.我们对其他技术持开放态度,这些技术必须确保我们的软件必须仅安装在一台机器上.请注意,我们是一群新手程序员(不是那么先进水平),所以; 如果这个过程得到详细阐述,对我们非常有帮助.

Ste*_*mul 5

我将从设置中删除所有许可功能并将其添加到应用程序.您的设置仍然可以将许可证写入磁盘注册表,方法是将其作为公共属性传递给msiexec.exe - UPPERCASE属性(或者您可以通过使用转换来"隐藏"更多内容以应用序列属性 - 它具有与在命令行上设置属性完全相同的效果).您还可以在交互式运行时从设置中的对话框设置LICENSE属性,但我最喜欢的方法是允许在静默部署模式下将未经验证的许可证密钥添加到注册表,而是直接在应用程序中输入许可证密钥,而不是设置,用于交互式部署(以上描述适用于静默部署):

msiexec.exe /I "C:\Install.msi" /QN /L*V "C:\msilog.log" LICENSE="123-456-789"
Run Code Online (Sandbox Code Playgroud)
  • 这将允许在企业部署方案中将许可证轻松添加到每台计算机.许可证值只是写入磁盘或注册表而无需验证.应用程序将验证它(比安装程序中的验证dll更安全).
  • 无需处理任何复杂的设置对话框,但您需要在应用程序中使用许可证对话框,如下所述.
  • 作为设置开发人员,您应该提供帮助在应用程序中实现该功能而不是设置,因此它似乎不是" 推卸责任 "的情况.这一切都是为了整体软件的可靠性和万无一失 - 下面列出了几个原因.
  • 几乎所有大公司都默默地部署MSI文件,因此无论如何大多数时候都会忽略设置GUI.你是那么简单地增加风险和浪费资源,如果你处理的设置许可.
  • 一个缺点:安装后作为非管理员用户运行的应用程序无法写入HKLM以在计算机上的所有用户之间共享串行(使用提升权限运行的设置可以).它必须写入HKCU,或者安装程序必须准备好对注册表中特定HKLM位置的写访问权限才能写入应用程序.我更喜欢为每个用户写入HKCU,因为许可证不太可供其他人复制,并且保留为用户特定数据(允许漫游,尽管这是大多数IT专业人员讨厌的功能).但是,应用程序或安装过程中设置的HKLM许可证密钥(如上所述,具有公共属性集)允许所有用户在启动应用程序时共享许可证.

有几个更具体的原因可以将许可证处理和验证保留在您的设置之外:

  • 大量的支持请求总是来自在设置中注册许可证密钥时遇到问题的人. 设置运行一次,如果出现问题,可以再次启动应用程序.对于没有经验的用户来说,这比你想象的更重要.您还可以使用更好的功能来处理异常和错误情况以及应用程序中可能出现的任何意外问题.
  • 设置中的串行验证公开了一个很容易被盗版破解的验证DLL /方法.你不会通过从你的设置中删除盗版来防止盗版,但至少你会让它变得更加困难.如果你隐藏了一些东西(静态链接,加密,混淆,验证过程在线,和/或我不熟悉的安全专业人员所做的任何事情),它在应用程序中更安全.
  • 允许应用程序试用版:如果安装程序需要支持应用程序试用版,则应允许用户在最终购买产品时输入许可证密钥 - 最好不必重新运行安装程序或卸载/重新安装添加许可证密钥.换句话说,您可能需要在应用程序中处理许可,为什么也会使您的设置复杂化?更多风险,更多QA,更多潜在支持请求以及在设置和应用程序中可能需要多个修复程序.总成本高?
  • 如果您的应用程序使用不同的版本运行,那么如果用户购买升级的许可证会怎么样?他们应该能够将其输入许可证对话框并尽可能解锁功能,而不是卸载并重新安装所涉及的所有笨蛋.对于某些升级,这很难实现,并且您通常最终会针对不同版本进行单独设置.
  • 如果网络使用代理服务器进行Internet访问,则在设置期间通过Internet注册许可证时会遇到问题(通常由市场营销部门要求).你有更多的功能可以在应用程序中检查和处理它 - 它可以再次尝试并等待访问(如果可能的话,通常你可以连接到IE进行自动代理配置).对于企业部署,您还需要一个静默安装选项,该选项不会验证密钥,只是将其写入注册表.尝试从静默安装的MSI访问Internet在我看来是一种相当极端的部署反模式.我发现它在设置GUI中也很可疑.在应用程序中进行注册 - 更少争议,并且您可以设置防火墙规则以允许它访问Internet(msiexec.exe可能被阻止 - 并且有充分理由).还可能有硬件防火墙和/或安全软件来处理,如果没有一些笨重的管理服务器配置,使得互联网访问变得困难甚至是不可能的.根据我的经验,这可能会使您的软件无法解决:" 只需从我们的网络和应用程序中解决这个问题 - 必须有更好的选择 - 太笨重且容易出错 ".
    • 更新:随着部署技术日趋成熟并变得更加"基于互联网",这个"真相"可能会发生变化,我们最终可以通过专门设计的部署来"在线"完成所有工作,例如通过在线"存储库"运行.我们将不得不拭目以待.目前我的观点是,任何设置互联网访问要求都是错误的,不合需要的.
  • 混乱许可的设置有时可能会导致在升级,修补迁移方案期间由于安装程序中的错误而删除许可证数据.这有时比你想象的要严重得多 - 这个包可能会在大公司中成千上万的工作站上运行,而且修复起来很麻烦.
    • 在MSI技术本身中存在相当糟糕的" 反模式 ",其中自修复或手动触发的修复将重置已由应用程序改变的注册表中的值.这可以清除许可证密钥.我们一直看到这一点,这是技术的错.这个领域不合逻辑.
    • 有一些修复 - 或者更确切地说是变通方法 - 为此(使用永久组件,从自定义操作而不是从组件中编写许可等),但我发现它们非常笨重,你必须有很多经验了解所有陷阱 - 甚至有经验的用户搞砸了这一点.
  • 许可是一个巨大的企业头痛 - 通常公司或公司所希望的是许可在服务器上集中管理,而不是基于文本序列号(例如通过网络启动应用程序时获得的并发或浮动许可) .只是提到这一点虽然它有点超出了问题的范围.在这些情况下,您在安装期间指定的通常是指向许可证服务器的IP地址,或者只是由WINSDNS解析的常规主机名.