我试图在UWP应用中使用Powershell启动一个简单的命令。我碰到一堵砖墙,并已完成以下操作:
在我的包裹清单文件中,我放置了以下内容:
<Extensions>
<desktop:Extension Category="windows.fullTrustProcess" Executable="powershell.exe">
然后我创建了一个组ID:
<desktop:ParameterGroup GroupId="RestartPC" Parameters="Restart-Computer"/>
在我的MainPage.xaml.cs中,输入以下内容:
string commandID = "RestartPC";
IAsyncAction operation = FullTrustProcessLauncher.LaunchFullTrustProcessForCurrentAppAsync(commandID);
启动应用程序时,powershell窗口会弹出一秒钟,然后关闭,但没有任何反应。
任何帮助将不胜感激。我在此线程中寻找了线索,但似乎没有任何作用。
答案 0 :(得分:1)
在“ fullTrustProcess”扩展名中指定的EXE必须是您程序包中的EXE。因此,针对您的方案的解决方案是在程序包中包含一个简单的EXE,然后仅调用Process.Start()或ShellExecute()来启动powershell。
要将任意参数从UWP传递到Powershell,可以将它们写入本地AppData,然后让助手EXE从那里提取它。这是一个如何在我的博客上执行此操作的示例: https://stefanwick.com/2018/04/06/uwp-with-desktop-extension-part-2/
答案 1 :(得分:0)
终于到了。
在App Manifest文件中,我这样输入:
<Extensions>
<desktop:Extension Category="windows.fullTrustProcess" Executable="ConsoleApp1.exe">
<desktop:FullTrustProcess>
<desktop:ParameterGroup GroupId="RestartPC" Parameters="c:\mypath\Powershelldb.exe"/>
<desktop:ParameterGroup GroupId="db" Parameters="c:\mypath\shutdowndb.exe"/>
</desktop:FullTrustProcess>
然后我创建了一个具有以下代码的控制台c ++应用程序:
using System;
using System.IO;
using System.Diagnostics;
using System.Reflection;
class Program
{
static void Main(string[] args)
{
try
{
if (args.Length != 0)
{
string executable = args[2];
string path=Assembly.GetExecutingAssembly().CodeBase;
string directory=Path.GetDirectoryName(path);
Process.Start(directory+"\\"+executable);
Process.Start(executable);
}
}
catch (Exception e)
{
Console.WriteLine(e.Message);
Console.ReadLine();
}
}
}
然后我创建了要按如下方式运行的可执行文件:
#include "stdafx.h"
#include <iostream>
int main()
{
system("start powershell.exe -command Restart-Computer");
return 0;
}
然后在我的UWP应用中使用以下内容:
private async void doSomething()
{
string commandID = "db";
ApplicationData.Current.LocalSettings.Values["parameters"] = commandID;
await FullTrustProcessLauncher.LaunchFullTrustProcessForCurrentAppAsync(commandID);
}
然后,Powershell启动并关闭我的计算机。显然这不是所有这些目的,但我想测试powershell命令:)
我发现了一个有用的线程here,对我们很有帮助。
也感谢Stefan的有用输入