我们使用Visual Studio 2013在vb.net中开发了一个软件。现在我们要构建一个具有以下步骤/功能的自定义安装程序:
它几乎像Adobe或Corel注册过程。我们对其他技术持开放态度,这些技术必须确保我们的软件必须仅安装在一台机器上。请注意,我们是一群新手程序员(不是那么先进水平),所以;如果这个过程得到详细阐述,对我们非常有帮助。
一次性设置:“
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
很难用今天的设置(proxies
,firewalls
,etc...
) - 这是验证许可证密钥的现代方法(在未来的设置中可能具有完全的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"
有几个更具体的原因可以将许可证处理和验证保留在您的设置之外:
正如您可能已经猜到的那样,Windows Installer没有提供任何开箱即用功能来处理许可。但是,如果价格合理,您可以购买商业许可解决方案。
由于这是一个非常广泛的问题,很难解释低级实现细节。我可以给你一个方向。
首先,您需要一个自定义UI,用户可以在其中键入许可证/激活密钥。有一些方法可以将自定义UI合并到Windows安装程序中,我已经在SO中解释了一些方法,请参考以下主题。
通过遵循上述方法,您应该能够添加用户将键入密钥的UI。一旦用户添加了密钥,他将按下自定义UI上的激活按钮,按钮单击事件处理程序将调用插入/验证用户输入的激活密钥所需的逻辑。
也许您可以尝试Inno Setup,它是免费的(甚至开源)安装系统。
它是基于脚本的,允许您调整安装程序并在其中执行所有操作!
使用输入序列号创建自定义页面非常简单,请参阅此示例:CustomPage for Serial Number in Inno Setup
并且还集成了Visual Studio。