如何使用Powershell从非高架.NET应用程序配置UWP应用程序

问题描述

我有一个.NET 4.6.2应用程序,需要添加预配置的UWP应用程序。当前的计划是使用Process.Start()启动powershell。假定UWP应用在exe路径中以“ test.appx”的形式出现。

这是代码

var psi = new processstartinfo
{
    UseShellExecute = true,CreateNowindow = false,Arguments = "Add-AppxProvisionedPackage -Online -PackagePath test.appx -SkipLicense",WindowStyle = ProcessWindowStyle.Hidden,FileName = "powershell.exe",Verb = "runas"
};

var proc = Process.Start(psi);

我正在使用runas动词,因为配置命令需要提升。

该过程开始时没有抛出,但是没有配置应用程序,如果我使用proc.WaitForExit()并检查ExitCode,它将返回错误代码1。

如果我使用清单来要求主机应用程序具有提升的权限,那么它确实可以工作,但是我宁愿不需要提升权限来运行主机应用程序。

我想知道我设置processstartinfo的方式是否有问题?否则,是否有办法暂时提升主机进程?

解决方法

当以管理员身份运行powershell.exe时,它不使用当前文件夹作为其起始文件夹,而是进入C:\ WINDOWS \ system32下。

因此,找不到test.appx文件。

这应该有效:

        var pathToAppx = Path.Combine(System.IO.Path.GetDirectoryName(Assembly.GetEntryAssembly().Location),"test.msixbundle");
        var psi = new ProcessStartInfo
        {
            UseShellExecute = true,CreateNoWindow = false,Arguments = $@"-NoExit &""Add-AppxProvisionedPackage -Online -PackagePath {pathToAppx} -SkipLicense;""",WindowStyle = ProcessWindowStyle.Normal,FileName = "powershell.exe",Verb = "runas"
        };

        var proc = Process.Start(psi);

        proc.WaitForExit();

在我的示例中,我使用了已经可以使用的msixbundle,但它不会产生影响。