2

私は現在、非常に満足しているユーザー インターフェイスを備えた WiX でビルドされた動作する .msi を持っています。欠落している唯一のものは、欠落している .NET 4.5 と次のいずれかを検出することです。

  • 組み込みの Web セットアップを使用してインストールするか、
  • ユーザーを .NET 4.5 のダウンロードに誘導する

私が使用していた以前の Setup and Deployment プロジェクトは、単にそれを URL 付きの LaunchCondition として追加しただけで、十分に機能しました。

ブートストラップに頼らずに、これを WiX インストーラーに追加するにはどうすればよいですか。私が言えることから、burn のようなブートストラップを使用するには新しいユーザー インターフェイスを再実装する必要があり、同様に dotNetInstaller のようなツールでも新しい UI が導入されます。

ブートストラップに独自の UI を実装せずに .NET インストールをトリガーできる場合は、msi の現在のユーザー インターフェイスも開きます。

4

3 に答える 3

1

これは私が使用することになったコードです...まだ完全なテストを通過していません!

Product.wxs:

    ...
    <!-- custom actions -->
    <InstallUISequence> <!-- .NET dialog runs only in UI mode and we skip it on the wrong platform so platform condition test is triggered later -->
      <?if $(var.Platform) = x64 ?>
      <Custom Action="InstallCA" Before="LaunchConditions">(NOT REMOVE~="ALL") AND NOT (Installed OR NETFRAMEWORK45) AND VersionNT64</Custom>
      <?elseif $(var.Platform) = x86 ?>
      <Custom Action="InstallCA" Before="LaunchConditions">(NOT REMOVE~="ALL") AND NOT (Installed OR NETFRAMEWORK45) AND NOT VersionNT64</Custom>
      <?endif?>
    </InstallUISequence>
  </Product> <!-- end product -->

  <Fragment>
    <Binary Id="WiXCustomActions" SourceFile="$(var.WiXCustomActions.TargetDir)$(var.WiXCustomActions.TargetName).CA.dll" />
    <CustomAction Id="InstallCA" BinaryKey="WiXCustomActions" DllEntry="DotNetCheck" Execute="firstSequence" />
  </Fragment>

そして、カスタムアクション(C#クラスライブラリ内):

    [CustomAction]
    public static ActionResult DotNetCheck(Session session)
    {
        try
        {
            MessageBoxResult result = System.Windows.MessageBox.Show(
                "This application requires that .NET Framework 4.5 is installed." + Environment.NewLine
                + "Would you like to open the Microsoft download page for" + Environment.NewLine + ".NET Framework 4.5?",
                ".NET Framework 4.5 is missing",
                MessageBoxButton.YesNo, MessageBoxImage.Information, MessageBoxResult.No, MessageBoxOptions.DefaultDesktopOnly);
            switch (result)
            {
                case MessageBoxResult.Yes:
                    System.Diagnostics.Process.Start("http://go.microsoft.com/fwlink/p/?LinkId=245484");
                    break;
            } //else just finish
        }
        catch (Exception ex)
        {
            session.Log("Error. " + ex.Message);
            System.Windows.MessageBox.Show("Error:" + ex.Message);
        }
        return ActionResult.SkipRemainingActions;
    }

それは私にとって十分にうまくいきます...

于 2012-10-04T07:42:53.293 に答える
1

人々が反対票を投じると確信しているという回答を提供しますが、UIをMSIから保持したかったので、このコードを追加してハードウェアキーのexeインストーラーを開始しました。MSI のベスト プラクティスに反することはわかっていますが、私が破ろうとしているのはこれだけです。お役に立てれば。

<Property Id="WixShellExecTarget" Value="[#myapplication.exe]" />
<CustomAction Id="LaunchApplication" BinaryKey="WixCA" DllEntry="WixShellExec" Impersonate="yes" />

次に、ボタンのクリックからカスタム アクションを実行しました。ダウンロード ボタンが表示されたエラー ダイアログを生成し、それを介してリンクすることができます。まったくエレガントではありませんが、回避策として私と私の会社で機能します..:)

編集: ボタンのクリックからこのコードを使用して、ダウンロード用の URL を起動することもできますValue。属性には完全なハイパーリンクがあります。

于 2012-10-02T08:59:33.830 に答える
0

そして、この DLL ライブラリを作成するときに重要なことの 1 つです。

カスタム アクション (C# クラス ライブラリ内):

次の参照を追加する必要があります:

using WixSharp    
using Microsoft.Deployment.WindowsInstaller
using System.Windows.Forms

また、「MessegeBoxResult」を「DialogResult」に置き換えます。MessegeBox はクラス System.Windows.Forms から取得する必要があります。

于 2014-12-11T16:14:51.617 に答える