自定义引导程序仅显示MSI对话框

时间:2012-09-05 13:12:26

标签: wix bootstrapper

我正在使用Wix 3.6,我想为我的先决条件和我在安装期间需要调用的某些exe实现一个bootstrapper。

我知道Burn存在并且已经玩过它,虽然我不喜欢它保持的对话框,即使你显示MSI对话框设置。

我目前使用C ++自定义操作安装我的先决条件和exe文件,但我希望我的用户有更好的安装过程,并遵循Windows Installer最佳实践指南。

有没有人知道制作一个显示MSI对话框并有任何示例的引导程序?

1 个答案:

答案 0 :(得分: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中实现bootstrapper的缺点当然是当.NET本身就是一个先决条件并且可能在目标机器上不存在时,你无法充分处理这种情况。