2

Wix 3.6 を使用しており、前提条件と、インストール中に呼び出す必要がある特定の exe 用にブートストラップを実装したいと考えています。

Burn が存在することは知っていて、いじってみましたが、MSI ダイアログ セットを表示してもダイアログが表示されるのは好きではありません。

現在、C++ カスタム アクションを使用してインストールする前提条件と exe ファイルがありますが、ユーザーにはより適切なインストール プロセスを提供し、Windows インストーラーのベスト プラクティス ガイドラインにも従うことを望みます。

MSIダイアログを表示し、例があるブートストラップを作成することを知っている人はいますか?

4

1 に答える 1

0

最初に、インストーラーのベスト プラクティスに従いたい場合は、カスタム アクションを使用して前提条件をインストールすることはお勧めしません。

あなたの質問について言えば、C# でのカスタム ブートストラップの実装は次のとおりです。

using System;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace SetupBootstrapper
{
    class Program
    {
        [STAThread]
        static void Main(string[] args)
        {
            var currentDir = AppDomain.CurrentDomain.BaseDirectory;
            var parameters = string.Empty;
            if (args.Length > 0)
            {
                var sb = new StringBuilder();
                foreach (var arg in args)
                {
                    if (arg != "/i" && arg != "/x" && arg != "/u")
                    {
                        sb.Append(" ");
                        sb.Append(arg);
                    }
                }
                parameters = sb.ToString();
            }

            bool isUninstall = args.Contains("/x") || args.Contains("/u");

            string msiPath = Path.Combine(currentDir, "MyMsiName.msi");

            if(!File.Exists(msiPath))
            {
                MessageBox.Show(string.Format("File '{0}' doesn't exist", msiPath), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            string installerParameters = (isUninstall ? "/x" : "/i ") + "\"" + msiPath + "\"" + parameters;

            var installerProcess = new Process { StartInfo = new ProcessStartInfo("msiexec", installerParameters) { Verb = "runas" } };

            installerProcess.Start();
            installerProcess.WaitForExit();
        }
    }
}

権限の昇格を求めるようにするには、アプリケーション マニフェスト ファイルを必要なアクセス レベルでプロジェクトに追加します。

もちろん、.NET にブートストラップを実装することの欠点は、.NET 自体が前提条件であり、ターゲット マシンに存在しない可能性がある状況を適切に処理できないことです。

于 2013-01-10T17:21:01.483 に答える