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

问题描述 投票:2回答:3

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

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

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

vb.net visual-studio-2013 installer windows-installer
3个回答
5
投票

一次性设置:“A setup is run once, an application can be started again - in order to resolve and debug problems interactively - with meaningful error messages show to the user.

因此:avoid license validation in the setup


许可证密钥:在您的应用程序中处理许可证密钥似乎是合乎逻辑的,原因如下:the one-shot nature of setups产生poor reliability(没有交互式调试 - 解决问题的能力差)。最终结果是lots of support calls非常微不足道。

此外,在设置中公开许可证验证DLL时,risk of piracy and hacking是一个主要问题。最后communication over the Internet很难用今天的设置(proxiesfirewallsetc...) - 这是验证许可证密钥的现代方法(在未来的设置中可能具有完全的Internet访问权限,但是要小心,因为公司用户可能有很多限制部署不当可能会损害公司使用的软件的销售和接受度。

最后你的应用程序通常必须支持trial version,然后你需要一个license dialog in your application。为什么也会使您的设置复杂化?

CAs:自定义动作很复杂,一般都很容易失败 - 由于复杂的sequencing-conditioning-impersonation issues以及整体poor debugability。更多信息:Why is it a good idea to limit the use of custom actions in my WiX / MSI setups?


部署的整体复杂性:对部署总体复杂性的简短尝试总结:Windows Installer and the creation of WiX(部分"The Complexity of Deployment")。


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

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

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

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

1
投票

正如您可能已经猜到的那样,Windows Installer没有提供任何开箱即用功能来处理许可。但是,如果价格合理,您可以购买商业许可解决方案。

  1. LogicNP
  2. DESAWARE

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

首先,您需要一个自定义UI,用户可以在其中键入许可证/激活密钥。有一些方法可以将自定义UI合并到Windows安装程序中,我已经在SO中解释了一些方法,请参考以下主题。

通过遵循上述方法,您应该能够添加用户将键入密钥的UI。一旦用户添加了密钥,他将按下自定义UI上的激活按钮,按钮单击事件处理程序将调用插入/验证用户输入的激活密钥所需的逻辑。


0
投票

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

它是基于脚本的,允许您调整安装程序并在其中执行所有操作!

使用输入序列号创建自定义页面非常简单,请参阅此示例:CustomPage for Serial Number in Inno Setup

并且还集成了Visual Studio。

© www.soinside.com 2019 - 2024. All rights reserved.