C # под Linux, Process.Start () исключение «Нет такого файла или каталога» - PullRequest
0 голосов
/ 02 октября 2018

У меня проблемы с вызовом программы с классом Process для запуска программы.Иерархия исполняемого файла находится в каталоге bin, а текущий рабочий каталог должен находиться в каталоге lib.

/project
    /bin
        a.out (this is what I need to call)
    /lib
        (this is where I need to be in order for a.out to work)

Я установил WorkingDirectory = "path/lib" и "FileName = "../bin/a.out".Однако я получаю сообщение об ошибке:

Unhandled Exception: System.ComponentModel.Win32Exception: No such file or directory

Я пытался установить WorkingDirectory для абсолютного и относительного пути, но ни один из них не работает.Я написал сценарий bash для выполнения a.out из каталога lib, и с помощью класса Process, который я вызываю сценарий bash, это работает, но я хочу сделать это без обходного пути сценария bash.Итак, как мне решить эту проблему?

1 Ответ

0 голосов
/ 18 октября 2018

Я ответил на ваш другой очень похожий вопрос , но вот конкретный ответ на этот.

Забудьте о WorkingDirectory, в нем не указывается расположение нового исполняемого файла процесса, если вы не установите UseShellExecute = true. Вот документация .

Вы должны использовать относительный путь к корню проекта в FileName.Например: process.StartInfo.FileName="bin/wrapper.sh";

Я не знаю, как выполнить файл и установить рабочий каталог этого процесса в Linux из ядра dotnet и C #.

Что вы можете сделать, это создать скрипт-обертку для выполнения вашего файла в lib.

В нашем корне проекта у нас есть два файла.Убедитесь, что оба имеют chmod +x.

  • bin/wrapper.sh - этот файл будет выполнять lib / a.out
  • lib/a.out - Hello, World!

bin / wrapper.sh

#!/bin/bash

cd lib
pwd
./a.out

Program.cs

using System;
using System.Diagnostics;

namespace SO_Question_52599105
{
    class Program
    {
        static void Main(string[] args)
        {
            Process process = new Process();
            process.StartInfo.FileName="bin/wrapper.sh";
            process.Start();
        }
    }
}

=== ВЫХОД ===

larntz@dido:/home/larntz/SO_Question_52599105$ ls
bin  hello.c  lib  obj  Program.cs  SO_Question_52613775.csproj

larntz@dido:/home/larntz/SO_Question_52599105$ ls bin/
Debug  wrapper.sh

larntz@dido:/home/larntz/SO_Question_52599105$ ls lib/
a.out

larntz@dido:/home/larntz/SO_Question_52599105$ dotnet run
/home/larntz/SO_Question_52599105/lib
Hello, World!
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...