Получить данные из программы, запущенной из vscode - PullRequest
0 голосов
/ 17 апреля 2019

У меня есть расширение vscode, которое запускает исполняемый файл, я знаю, как передавать данные из vscode в мою программу, но не наоборот.

// class that launches the exe
class Execute {
  constructor(private _extensionPath: string) {}

  public Launch() {
    console.log('213');
    Process.exec(
      `WpfApp1.exe true`,
      { cwd: this._extensionPath },
      (error: Error, stdout: string, stderr: string) => {
        if (stdout.length === 0) {
          return;
        }
      }
    );
  }
}


// calling the class
let exe = new Execute(
vscode.extensions.getExtension('author.extension').extensionPath
);
exe.Launch();

c # получение данных

void App_Startup(object sender, StartupEventArgs e)
{
    try
    {
        test_p = e.Args[0];
        if (test_p == "true")
        {

        }
        }
        catch { MessageBox.Show("fail"); }
}

как я могу отправить данные из приложения c # в расширение vscode? вызов функции в vscode был бы еще лучше.

Ответы [ 2 ]

1 голос
/ 17 апреля 2019

Вы также можете запустить исполняемый файл с помощью c #:

public static string[] Cmd(bool xWaitForExecution, params string[] xCommands)
{
    //PROCESS CMD
    if (xCommands == null || xCommands.Length == 0) return null;
    ProcessStartInfo info = new ProcessStartInfo("cmd.exe");
    info.CreateNoWindow = true;
    info.UseShellExecute = false;
    info.RedirectStandardInput = true;          //STD INPUT
    info.RedirectStandardOutput = true;         //STD OUTPUT
    info.RedirectStandardError = true;          //STD ERROR
    Process process = Process.Start(info);

    //WRITE COMMANDS
    using (StreamWriter sw = process.StandardInput)
        if (sw.BaseStream.CanWrite)
            foreach (string cmd in xCommands)
                sw.WriteLine(cmd);

    //GET OUTPUT & ERROR
    if (!xWaitForExecution) return null;
    string output = process.StandardOutput.ReadToEnd();     //OUTPUT
    string error = process.StandardError.ReadToEnd();       //ERROR
    string exit = process.ExitCode.ToString();              //EXIT CODE
    process.Close();
    return new string[] { output, error, exit };
}

Функция запускает cmd64.exe и должна использовать как:

//Call Cmd, true means the c# application will wait for the complete execute of your executable (needed to obtain output values)
string[] ret = Cmd(true, "\\mypath\\my.exe -Argument1 -Argument2"); //Passing arguments depends on your executable
string output = ret[0];
Console.WriteLine(ret[0]) //printed arguments from your executable (for instance python: print("Argument1"))

Не совсем понятно, зачем вам нужнорасширение кода VS для выполнения исполняемого файла.Это рабочая альтернатива для запуска исполняемых файлов на Windows из C #.

0 голосов
/ 17 апреля 2019

Отправка данных:

 private void AnyEvent(object sender, MouseEventArgs e)
    {
      const String output = "testOutput,testOutput2";
      Console.Write(output);
    }

Получение данных:

 import * as Process from 'child_process';
 // put the code below in a class or function.
 Process.exec(
  `app.exe input`,
  { cwd: "Path to folder of the executable" },
  (error, stdout: string, stderr: string) => {
    const output = stdout.split(','); //it only outputs data after the exe is closed!?
    if (output[0] === 'testOutput') {
      console.log('Output: == "testOutput"');
    }
  }
);

Пример Проект должен работать после запуска npm i, если не открыта проблема или комментарий ниже.

...