首页 > 解决方案 > WiX CustomAction 的子进程忽略 -Verb runAs

问题描述

我有一个需要在管理员权限下运行 PowerShell 脚本的 WiX CustomAction。在 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"。

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

标签: c#wixcustom-action

解决方案


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

c#/.net 还可以创建一个 powershell 管道,以便您可以加载脚本并执行它。这使您可以更好地控制错误处理以及记录到安装程序日志的能力。否则,如果您真正想做的只是掏空,您可以使用 WiX Quiet Execute 自定义操作模式,它会为您完成所有这些操作并将输出捕获到 MSI 日志。


推荐阅读