Windows installer 如何在InstallShield中将许可证文件动态添加到LicenseAgreement对话框

Windows installer 如何在InstallShield中将许可证文件动态添加到LicenseAgreement对话框,windows-installer,installshield,eula,Windows Installer,Installshield,Eula,我有一个基本的MSI项目安装程序。当用户运行安装程序时,我希望从服务器下载一个EULA文件,然后在安装时将其显示在许可协议对话框中。这在InstallScript安装程序中是可能的。但是如何在基本MSI安装程序的LicenseAgreement对话框中动态显示EULA文件?您需要一个自定义操作来动态下载富文本,然后使用临时视图更新内存中的MSI数据库。见: 如果您想使用C/DTF,它更像这样: 通过你的设置下载东西是一个非常糟糕的主意。安装程序可能运行在一个系统上,该系统具有用于web访问的代理

我有一个基本的MSI项目安装程序。当用户运行安装程序时,我希望从服务器下载一个EULA文件,然后在安装时将其显示在许可协议对话框中。这在InstallScript安装程序中是可能的。但是如何在基本MSI安装程序的LicenseAgreement对话框中动态显示EULA文件?

您需要一个自定义操作来动态下载富文本,然后使用临时视图更新内存中的MSI数据库。见:

如果您想使用C/DTF,它更像这样:


通过你的设置下载东西是一个非常糟糕的主意。安装程序可能运行在一个系统上,该系统具有用于web访问的代理服务器,并且通常有多个防火墙软件、硬件,可能还有安全软件。所有这些因素都会干扰下载。用户可以在离线时安装,而无需无线连接。您应该使用不同的方法,可能只是链接到在线许可协议,以便打开浏览器。它通常会配置正确的代理设置和硬件详细信息。此外,您的安装程序也可以在静默模式下运行,并且在静默安装期间,您绝对不应该有任何试图访问Internet的自定义操作。在静默模式下跳过整个GUI,但是很容易错误地配置自定义操作,从而在静默模式下触发运行时错误。感谢Christopher的帮助。我在InstallScript CA中尝试过这个解决方案。我能够阅读特定的富文本,但我无法找到InstallScript API来临时更新MSI DB。就连我的许可协议也很庞大。那个么,将数据写入MSI DB的文本字段是否有效呢?我个人正试图避免对每次运行时可能有不同EULA的安装程序发表评论。我个人认为,没有人在安装程序中读取任何内容,因此我尽可能保持UI的简单。也许您更容易/更好地将此功能从安装程序中移到应用程序中,这样您可以更容易地编写代码,并在eula发生更改时更频繁地提示用户。我同意Chris的观点,将其放在应用程序中—更好的错误处理和调试功能,而且,即使安装程序以静默方式运行,用户也可以看到许可协议。我经常建议将功能从设置转移到应用程序,例如,有关详细信息,请参见链接-您的EULA问题的基本原理类似。为了避免推卸责任-可能会主动提出自己在应用程序中进行编码?在线EULA的明显风险,无论是通过设置还是通过应用程序进行的,都是您的应用程序在公司网络上通常无法保证Internet访问-应用程序可能只能访问Intranet,以及浏览器和某些选定应用程序的互联网代理访问。请参阅上面评论中有关许可的链接内容中更新的宣传语。也许从应用程序启动浏览器以查看在线EULA最简单?但是,你如何保证用户确实看到了它呢?我不是律师:-。