WiX CustomAction的子进程将忽略-Verb runAs

问题描述

我有一个WiX CustomAction,它需要以管理员权限运行PowerShell脚本。在C#中,执行此操作的明显方法如下:


                var startInfo = new processstartinfo
                {
                    FileName = "powershell.exe",Arguments = $"-File myscript.ps1",Verb = "runAs",UseShellExecute = false,CreateNowindow = true,RedirectStandardError = true,RedirectStandardOutput = true
                };

                var process = Process.Start(startInfo);

该脚本需要管理员权限才能运行(使用#Requires -RunAsAdministrator)。

自定义操作是在提示用户允许安装程序对计算机进行更改之后执行的。即After =“ InstallInitialize”。

请有人建议我如何解决此问题。例子会很棒。

解决方法

自定义操作必须已经运行提升。这是通过将其作为没有模拟的延迟自定义操作进行调度并在InstallInitialize和InstallFinalize之间的InstallationExecuteSequence中进行调度来实现的。

此外,c#/。net可以创建Powershell管道,因此您可以加载脚本并执行它。这使您可以更好地控制错误处理,并可以登录到安装程序日志。否则,如果您真正想做的只是买壳而已,则只能使用WiX Quiet Execute自定义操作模式,它将为您完成所有这些操作并将输出捕获到MSI日志中。