Wix-未安装.Net framework时,启动浏览器至.Net framework下载URL

Wix-未安装.Net framework时,启动浏览器至.Net framework下载URL,.net,wix,.net,Wix,我有一个安装程序,它是从安装项目创建的,并使用找到的方法使用MSBuild构建的。虽然我设置了生成.msi文件的构建过程,但我没有设置项目本身。安装项目的启动条件之一是检查.Net framework版本4,如果目标计算机上未安装该版本,则会向用户显示一个消息框,询问用户是否希望访问URL以下载.Net framework安装文件。如果用户在消息框中选择“是”,则会启动浏览器并加载URL。美好的安装项目还检查产品所需的另一个先决条件,并执行相同的操作 我目前正在使用Wix重写安装程序,到目前为止

我有一个安装程序,它是从安装项目创建的,并使用找到的方法使用MSBuild构建的。虽然我设置了生成.msi文件的构建过程,但我没有设置项目本身。安装项目的启动条件之一是检查.Net framework版本4,如果目标计算机上未安装该版本,则会向用户显示一个消息框,询问用户是否希望访问URL以下载.Net framework安装文件。如果用户在消息框中选择“是”,则会启动浏览器并加载URL。美好的安装项目还检查产品所需的另一个先决条件,并执行相同的操作

我目前正在使用Wix重写安装程序,到目前为止,我已经能够解决一些小问题(请记住,我仍然处于安装程序的早期阶段)。我已经能够为.Net Framework v4.0和其他必备软件重新创建一个检查。我还能够显示一个消息框,询问用户是否希望启动浏览器到URL,以使用自定义wix操作下载其他必备软件

问题

为了对.Net Framework执行与旧安装程序相同的操作,我编写了另一个自定义操作来启动指向.Net Framework下载URL的浏览器。我编译了自定义操作和安装程序,并从测试机中删除了.Net framework。我在我的测试机器上运行了安装程序,但自定义操作不起作用,这是因为测试机器上不再安装.Net Framework

问题

是否有办法重新创建原始安装项目能够检查.Net framework的方式,向用户显示消息框,然后在用户选择的情况下启动指向下载URL的浏览器?我已经能够确定框架是否未安装,只需要一种显示消息框的方法,如果用户选择,启动指向特定URL的浏览器,并阻止安装程序继续

有没有办法在未安装.Net framework的计算机上运行自定义操作?(我猜这个问题的答案是否定的!)


像往常一样,提前感谢你

好的,经过长时间的调查和大量的尝试和错误,我能够实现在某些注册表项不存在时启动默认web浏览器的目标

我首先在登记处检查了所需的条目

<!--Property that indicates whether .Net framework 4.0 is currently installed-->
<Property Id="NETFRAMEWORK40">
  <RegistrySearch Id="NetFramework40" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full" Name="Install" Type="raw" />
</Property>
<!--Property that indicates whether 2007 Office Data Connectivity is currently installed-->
<Property Id="ODCINSTALLED">
  <RegistrySearch Id="CheckODCVersion" Root="HKLM" Key="SOFTWARE\Classes\Installer\Products\000021091D0090400000000000F01FEC" Name="Version" Type="raw" />
</Property>   

然后,我将WixUtilExtension引用添加到项目中,并设置了以下3个自定义操作:

<CustomAction Id="SetExec1" Property="WixShellExecTarget" Value="http://go.microsoft.com/fwlink/?LinkID=186913" />
<CustomAction Id="SetExec2" Property="WixShellExecTarget" Value="http://www.microsoft.com/downloads/en/details.aspx?familyid=7554f536-8c28-4598-9b72-ef94e038c891&amp;displaylang=en" />
<CustomAction Id="LaunchBrowser" BinaryKey="WixCA" DllEntry="WixShellExec" Execute="immediate" Return="ignore" />

前两个自定义操作用于设置将在不同时间使用的WixShellExecTarget属性,最后一个自定义操作是使用WixShellExec实用程序启动默认浏览器

然后,我为我的安装程序用户界面设置了两个自定义对话框,只有两个简单的消息框,其中包含一条短消息以及“是”和“否”按钮。以下只是其中一个消息框,因为它们的外观非常相似:

  <Dialog Id="NetFRWDlg" Width="260" Height="95" Title="[ProductName] Installation" NoMinimize="yes">

    <Control Id="Text" Type="Text" X="48" Y="15" Width="194" Height="40">
      <Text>This setup requires the .NET Framework version 4.0. Please install the .NET Framework and run this setup again. The .NET Framework can be obtained from the web. Would you like to do this now?</Text>
    </Control>

    <Control Id="YesButton" Type="PushButton" X="72" Y="67" Width="56" Height="17" Default="yes" Cancel="yes" Text="[ButtonText_Yes]">
      <Publish Event="DoAction" Value="SetExec1" Order="1">1</Publish>
      <Publish Event="DoAction" Value="LaunchBrowser" Order="2">1</Publish>
      <Publish Event="EndDialog" Value="Exit" Order="3">1</Publish>
    </Control>

    <Control Id="NoButton" Type="PushButton" X="132" Y="67" Width="56" Height="17" Default="no" Cancel="yes" Text="[ButtonText_No]">
      <Publish Event="EndDialog" Value="Exit">1</Publish>
    </Control>

    <Control Id="Icon" Type="Icon" X="15" Y="15" Width="24" Height="24" ToolTip="Information icon" FixedSize="yes" IconSize="32" Text="[WarningIcon]" />
  </Dialog>

此安装程序需要.NET Framework 4.0版。请安装.NET Framework并再次运行此安装程序。NET框架可以从web上获得。你现在想做这个吗?
1.
1.
1.
1.
然后,我将这两个对话框添加到InstallUISequence表中:

  <InstallUISequence>
    <Show Dialog="NetFRWDlg" After="AppSearch">
      (NOT Installed) AND (NOT NETFRAMEWORK40)
    </Show>
    <Show Dialog="ODCDlg" After="AppSearch">
      (NOT Installed) AND (NOT ODCINSTALLED)
    </Show>
    <Show Dialog="Install_PAGE1" After="CostFinalize" />
  </InstallUISequence>

(未安装)和(非NETFRAMEWORK40)
(未安装)和(未安装)

为了简要说明这一切是如何结合在一起的,当安装程序启动时,它将使用NETFRAMEWORK40和ODCINSTALLED属性检查所需的注册表。在安装过程中,如果缺少这些注册表,则会显示NetFRWDlg或ODCDlg对话框/消息框。然后,通过单击对话框/消息框的“是”按钮,用户可以选择启动默认浏览器以查看传入的URL。在执行此操作时,将执行设置WixShellExecTarget属性、启动默认浏览器和退出安装程序的一系列操作。如果用户单击“否”,则安装程序将直接退出。

您所描述的内容可以通过使用引导程序来完成。生成这些将自动处理必备软件的安装。某些软件包已经包含在Windows SDK中(例如C:\Program Files(x86)\Microsoft SDK\Windows\v7.0A\Bootstrapper\packages),您可以从msbuild中使用它们。看一看

有关创建引导程序可执行文件的任务(首先构建msi,然后为其创建引导程序)


希望您觉得这很有用。

正如ZFE所提到的,也许最简单的方法就是使用引导程序

一旦您有了托管引导程序应用程序,您需要做的就是添加.Net 4.0作为先决条件

a) 将对文件WixNetFxExtension.dll的引用添加到引导程序/托管引导程序应用程序项目中

b) 将以下内容添加为链中的第一项

<PackageGroupRef Id="NetFx40Web"/>

真的是这样


注意:以上内容将通过internet下载.NET4,因此需要可用的internet连接。此处的进一步信息和选项:

您是否可以通过添加对WixNetFxExtension和
的引用来简化此操作,而不是自己在注册表中查找以检查是否存在框架?这非常有用……但是,如果您想支持Windows XP之类的操作系统,该怎么办。Windows XP不支持.NET 4.5,如果用户告诉他们应用程序在安装时不能在其操作系统上运行,而不是在运行时,这似乎更直观,也不那么令人沮丧。虽然你可以