C# на Linux Поиск текущего каталога с помощью Process.Start?Linux

Ответить Пред. темаСлед. тема
Anonymous
 C# на Linux Поиск текущего каталога с помощью Process.Start?

Сообщение Anonymous »

Я писал простую программу, чтобы обернуть некоторые общие вызовы GIT для меня. Моей целевой платформой является Linux, и я ожидаю нормального поведения поиска Linux для начальных процессов (например, не выполняйте поиск текущего каталога, если не будет четко запрошен). Действительно ожидаемое поведение? Это задокументировано?

Код: Выделить всё

using System;
using System.Runtime.InteropServices;
using System.Diagnostics;
using System.IO;

class ProcessRunner {
public static (string output, string error, int exitCode) Run(string exeName, string arguments) {
Process proc = new() {
StartInfo = new() {
UseShellExecute = false,
RedirectStandardError = true,
RedirectStandardOutput = true,
FileName = exeName,
Arguments = arguments,
}
};

proc.Start();
string output = proc.StandardOutput.ReadToEnd();
string error = proc.StandardError.ReadToEnd();
proc.WaitForExit();

return (output, error, proc.ExitCode);
}
}

class Program
{
static void Main()
{
Console.WriteLine($"OS: {RuntimeInformation.OSDescription}");
Console.WriteLine($"Current Directory: {Directory.GetCurrentDirectory()}");

File.Delete("git");
try {
var (stdoutGit, stdErrGit, exitCodeGit) = ProcessRunner.Run("git", "status");
Console.WriteLine($"git (file missing) exit: '{exitCodeGit}', stdout '{stdoutGit}', stderr '{stdErrGit}'");
} catch (Exception ex) {
Console.WriteLine("Failed to run git (file missing attempt): " + ex.Message);
}

var (stdoutTouch, stdErrTouch, exitCodeTouch) = ProcessRunner.Run("touch", "git");
Console.WriteLine($"touch exit: '{exitCodeTouch}', stdout '{stdoutTouch}', stderr '{stdErrTouch}'");

try {
var (stdoutGit, stdErrGit, exitCodeGit) = ProcessRunner.Run("git", "status");
Console.WriteLine($"git  (dummy file exists) exit: '{exitCodeGit}', stdout '{stdoutGit}', stderr '{stdErrGit}'");
} catch (Exception ex) {
Console.WriteLine("Failed to run git (dummy file exists) " + ex.Message);
}
}
}
< /code>
Вот выход: < /p>
OS: Ubuntu 24.04.1 LTS
Current Directory: /app
Failed to run git (file missing attempt): An error occurred trying to start process 'git' with working directory '/app'. No such file or directory
touch exit: '0', stdout '', stderr ''
Failed to run git (dummy file exists) An error occurred trying to start process '/app/git' with working directory '/app'. Permission denied
Я ожидаю получить один и тот же файл-не ввод для обеих попыток вызвать GIT (так как я сомневаюсь, что DotnetFiddle установлен на песочнице)

Подробнее здесь: https://stackoverflow.com/questions/796 ... cess-start
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • C# на Linux Поиск текущего каталога с помощью Process.Start?
    Anonymous » » в форуме C#
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous
  • Process Process Process с более низким использованием процессора
    Anonymous » » в форуме JAVA
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous
  • Process Process Process с более низким использованием процессора
    Anonymous » » в форуме JAVA
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous
  • Открытие файла Excel на C# с помощью Process.Start
    Anonymous » » в форуме C#
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Открытие PDF-файлов с помощью Process.Start
    Anonymous » » в форуме C#
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Linux»