как выполнить команду powershell, используя FulltrustProcessLauncher - PullRequest
0 голосов
/ 25 июня 2018

Я пытаюсь запустить простую команду с использованием powershell в приложении UWP.Я бью кирпичную стену и сделал следующее:

В своем файле Package Manifest я поместил следующее:

<Extensions>
    <desktop:Extension Category="windows.fullTrustProcess" Executable="powershell.exe">

Затем я создал идентификатор группы:

<desktop:ParameterGroup GroupId="RestartPC" Parameters="Restart-Computer"/>

В свой файл MainPage.xaml.cs я вставил следующее:

string commandID = "RestartPC";

        IAsyncAction operation = FullTrustProcessLauncher.LaunchFullTrustProcessForCurrentAppAsync(commandID);

Когда я запускаю приложение, окно powershell всплывает на секунду, а затем закрывается, но ничего не происходит.

Любая помощь будет оценена.Я посмотрел на эту ветку для подсказок, но, похоже, это не имеет никакого значения.

UWP и FullTrustProcessLauncher отсутствуют в namaspeace

Ответы [ 2 ]

0 голосов
/ 26 июня 2018

Наконец-то дошло.

В файле манифеста приложения я поместил это:

<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:)

Я нашел полезную нить здесь , которая очень помогла.

Спасибо Стефануза его полезный вклад также

0 голосов
/ 26 июня 2018

EXE-файл, указанный в расширении 'fullTrustProcess', должен быть EXE-файлом в вашем пакете.Таким образом, решение для вашего сценария состоит в том, чтобы включить простой EXE-файл в ваш пакет, который затем просто вызывает Process.Start () или ShellExecute () для запуска powershell.

Для передачи произвольных параметров из UWP в powershellВы можете записать их в локальные AppData и попросить вспомогательный EXE-файл забрать их оттуда.Вот пример того, как это сделать в моем блоге: https://stefanwick.com/2018/04/06/uwp-with-desktop-extension-part-2/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...