问题描述
我有一个.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,但它不会产生影响。