我有一个安装程序,它是从安装项目创建的,并使用MSBuild使用找到的方法here构建 . 虽然我设置了生成.msi文件的构建过程,但我没有设置项目本身 . 安装项目的启动条件之一是检查.Net框架版本4,如果它没有安装在目标机器上,则会向用户显示一个消息框,询问他们是否要访问URL以下载.Net框架安装文件 . 如果用户在消息框中选择"yes",则会启动浏览器并加载URL . 尼斯 . 安装项目还会检查我们的产品需要的另一个先决条件,并执行相同的操作 .
我目前正在使用Wix重写安装程序,到目前为止,我已经能够解决一些小问题(请记住,我仍处于安装程序的早期阶段) . 我已经能够重新创建.Net Framework v4.0和其他必备软件的检查 . 我还能够显示消息框,询问用户是否要使用自定义wix操作启动浏览器到URL以下载其他必备软件 .
The Problem
想要像旧安装程序那样为.Net Framework做同样的事情,我写了另一个自定义操作来启动.Net框架下载URL的浏览器 . 我编译了自定义操作和安装程序,并从我的测试机器中删除了.Net框架 . 我在我的测试机器上运行安装程序并且自定义操作不起作用,这是因为.Net Framework不再安装在测试机器上!
The Question
有没有办法重新创建原始安装项目能够检查.Net框架的方式,向用户显示一个消息框,然后如果用户选择这样做,则启动浏览器到下载URL?我已经能够确定是否未安装框架,只需要一种方法来显示消息框,如果用户选择并阻止安装程序继续,则启动浏览器到特定的URL .
要么
有没有办法在没有安装.Net框架的机器上运行自定义操作? (我猜这个问题的答案是否定的!)
一如既往,先谢谢
3 回答
好的,经过一些漫长的调查和大量的反复试验,我能够实现在没有某些注册表项时启动默认Web浏览器的目标 .
我首先检查了注册表中的必填项
然后我将WixUtilExtension引用添加到项目中并设置以下3个自定义操作:
前两个自定义操作用于设置将在不同时间使用的WixShellExecTarget属性,最后一个自定义操作是使用WixShellExec实用程序启动默认浏览器 .
然后,我为我的安装程序UI设置了2个自定义对话框,只有2个带有短消息的简单消息框以及是和否按钮 . 以下只是其中一个消息框,因为它们在外观上非常相似:
然后我将这两个对话框添加到InstallUISequence表中:
为了简要概述所有这些是如何组合在一起的,当安装程序启动时,它将使用NETFRAMEWORK40和ODCINSTALLED属性检查所需的注册表 . 在InstallUISequence期间,如果缺少这些注册表,将显示NetFRWDlg或ODCDlg对话框/消息框 . 然后,用户可以通过单击对话框/消息框的“是”按钮来选择启动默认浏览器以查看传入的URL . 执行此操作时,将执行设置WixShellExecTarget属性,启动默认浏览器和退出安装程序的操作序列 . 如果用户单击否,则安装程序将退出 .
正如ZFE所提到的,也许最简单的方法是使用引导程序 .
拥有托管引导程序后,只需将.Net 4.0作为先决条件添加即可 .
a)将文件WixNetFxExtension.dll的引用添加到Bootstrapper /托管引导程序应用程序项目中
b)添加以下内容作为链中的第一项 .
真的就是这样!
NB以上将通过互联网下载.net 4,因此需要互联网连接 . 更多信息和选项:wixnetfxextension documentation
您所描述的内容可以通过使用bootstrappers来完成 . 生成这些将自动处理必备软件的安装 . 某些软件包已包含在Windows SDK(例如C:\ Program Files(x86)\ Microsoft SDKs \ Windows \ v7.0A \ Bootstrapper \ Packages)中,您可以使用它们,例如来自msbuild . 看看吧
GenerateBootstrapper
即将创建bootstrapper可执行文件的任务(首先构建你的msi,然后为它创建引导程序) .
希望您觉得这个有帮助 .