Могу ли я использовать команды powershell в Unity? - PullRequest
0 голосов
/ 04 июня 2018

впервые задаю вопрос здесь, так что, надеюсь, он соответствует этикету.Кто-нибудь знает, как использовать процесс C #

..UseShellExecute = false;

в Unity3D ?Использование значения false приводит к падению исполняемого файла.Но если установить значение true, отключить возможность отправки письменных команд. Все пожелания, предложения и решения приветствуются.Спасибо всем!Пример кода ниже:

    ProcessStartInfo processinfo = new 
    ProcessStartInfo("C:/ConsoleExample/bin/Debug/ConsoleExample.exe");
    processinfo.RedirectStandardOutput = false;
    processinfo.RedirectStandardError = false;
    processinfo.RedirectStandardInput = true;
    processinfo.UseShellExecute = false; //<----Causes program to crash exe when launched, but is required for write console key.
    processinfo.CreateNoWindow = false;

    Process.Start(processinfo);

    Thread.Sleep(1000);


    //Write text to console exe file from unity as a command.
    processinfo.StandardInput.Write(ConsoleKey.Escape);

1 Ответ

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

Итак, я получил это в конце концов.Спасибо @Hristo и @Programmer за помощь и комментарии.Очень признателен.Вот последний код, который запускает консольное приложение и отправляет ключи.Если у кого-то возникнут вопросы или понадобится более подробная информация, сообщите мне об этом по почте или сообщению, и я опубликую больше об этом.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Diagnostics;
using System.Threading;
using UnityEngine.UI;
using UnityStandardAssets.CrossPlatformInput;

public class Camera_controller : MonoBehaviour {
public int caminterrupt;
private IEnumerator coroutine;

// Use this for initialization
void Start () {
    caminterrupt = 0;
    coroutine = startcamera();
}

// Update is called once per frame
void Update () {

}

public void button1(string pressed)
{

    if (caminterrupt == 0)
    {
        caminterrupt = 1;

        StartCoroutine(coroutine);



    }
    else
    { caminterrupt = 0;
        StopCoroutine("coroutine");
    }


}

public IEnumerator startcamera() {

    //string strOutput;

    //Starting Information for process like its path, use system shell i.e. 
control process by system etc.

    ProcessStartInfo psi = new 
ProcessStartInfo(@"C:\ConsoleExample\bin\Debug\ConsoleExample.exe");
    // its states that system shell will not be used to control the process 
instead program will handle the process
    psi.UseShellExecute = false;
    psi.ErrorDialog = false;
    // Do not show command prompt window separately
    //psi.CreateNoWindow = true;
    //psi.WindowStyle = ProcessWindowStyle.Hidden;
    //redirect all standard inout to program
    psi.RedirectStandardError = true;
    psi.RedirectStandardInput = true;
    psi.RedirectStandardOutput = true;
    //create the process with above infor and start it
    Process plinkProcess = new Process();
    plinkProcess.StartInfo = psi;
    plinkProcess.Start();
    //link the streams to standard inout of process
    StreamWriter myStream = new 
 StreamWriter(plinkProcess.StandardInput.BaseStream, Encoding.ASCII);

    //send command to cmd prompt and wait for command to execute with thread 
 sleep


    refire:
        if (caminterrupt == 1)
        {

            myStream.WriteLine("y");
        yield return new WaitForSeconds(1);
        goto refire;

        }
        if (caminterrupt == 0)
        {
            myStream.WriteLine("e");

        }


    myStream.WriteLine("e");

    // flush the input stream before sending exit command to end process for 
any unwanted characters

    myStream.Close();

    plinkProcess.Close();
    caminterrupt = 0;

    }
 }

Это сторона Unity, которая вызывает файл консоли и взаимодействует путем отправки ключевых команд.

...