2

感谢安德烈在这里的回答:

使用 WIX 安装程序安装 .NET Framework 4.7.2(如果需要)

我检查是否安装了 .NETFramework 4.7.2 并安装它。不过,我还有一个小问题……我的主应用程序有一个安装后操作来启动该应用程序。在安装 4.7.2 并且系统重新启动之前,无法启动该应用程序。我可以简单地从我的应用程序安装程序中删除此安装后操作代码,但如果它确实启动了应用程序,如果 4.7.2 已经安装并且没有理由重新启动,那就太好了。

如何从我的应用程序安装程序“查看”我的 Bootstrapper 项目并查看是否刚刚安装了 .NET Framework?然后我可以有条件地运行安装后操作。如果刚刚安装了 4.7.2,我相信它会提示要求重新启动,这是完美的。

欢迎提出其他解决问题的方法的建议。我想另一种处理方式是在 .NET 安装后强制重启,并在重启后安装我的应用程序。但我认为最好安装所有内容然后重新启动。我认为这是一个非常普遍的问题,但我没有找到任何解决它的方法。也许问题太简单了!我是 WIX 新手,不清楚如何将变量和信息从一个项目共享到另一个项目。特别是从主应用程序安装程序获取引导程序信息。让我知道我是否可以提供澄清或更详细的信息。
谢谢!

安装后操作如下所示:

<CustomAction Id="PostInstallAction"
      Return="check"
      Execute="immediate"
      BinaryKey="MyAppInstaller.CustomActions.CA.dll"
      DllEntry="PostInstallAction" />

    <InstallExecuteSequence>
      <Custom Action="PreInstallAction" Before="InstallValidate"  />
      <Custom Action="PostInstallAction" After="InstallFinalize"  />
    </InstallExecuteSequence>

// follow function abbreviated (no logging and try/catch).In file customactions.cs
public static ActionResult PostInstallAction(Session session)
        {                             
                if (!Process.GetProcessesByName(MyAppLauncherFileName).Any())
                    Process.Start(ConfigurationManager.AppSettings[MyAppLauncherExePath]);

                return ActionResult.Success;              
        }

跟进:如果安装 4.7.2 所需的重新启动自动发生,而不是提示用户,那也很好。有没有办法做到这一点,或者是硬编码到 4.7.2 中。网络安装程序?

4

1 回答 1

1

关于检查是否安装了 .NET 4.6.1 或更高版本,您可以添加以下内容:

<PropertyRef Id="WIX_IS_NETFRAMEWORK_461_OR_LATER_INSTALLED" />
  <Condition Message="$(var.ProductName) requires .NET Framework 4.6.1 or 
higher.">
<![CDATA[Installed OR WIX_IS_NETFRAMEWORK_461_OR_LATER_INSTALLED]]>
</Condition>

关于重新启动,您可以使用 ForceReboot 操作中的 Supress 属性。您可以参考以下网址:

http://wixtoolset.org/documentation/manual/v3/xsd/wix/forcereboot.html

https://docs.microsoft.com/en-us/windows/desktop/Msi/reboot

https://docs.microsoft.com/en-us/windows/desktop/Msi/forcereboot-action

于 2019-01-16T08:40:06.203 回答