Aller au contenu

« Process » : différence entre les versions

De Banane Atomic
Ligne 15 : Ligne 15 :
})?.WaitForExit();
})?.WaitForExit();


// read output and error
// read synchronously output and error
var process = Process.Start(new ProcessStartInfo("/path/folder/binary", "arg1 arg2")
var process = Process.Start(new ProcessStartInfo("/path/folder/binary", "arg1 arg2")
{
{
Ligne 26 : Ligne 26 :
process.WaitForExit();
process.WaitForExit();


// écoute d'output et d'error
// read asynchronously output and error
command = command.Replace("\"", "\\\"");
var process = Process.Start(new ProcessStartInfo("/path/folder/binary", "arg1 arg2")
var process = new Process()
{
{
     StartInfo = new ProcessStartInfo
     RedirectStandardOutput = true,
    {
    RedirectStandardError = true,
        FileName = "/bin/bash",
    UseShellExecute = false // default value
        Arguments = $"-c \"{command}\"",
});
        RedirectStandardOutput = true,
        RedirectStandardError = true,
        UseShellExecute = false,
        CreateNoWindow = true,
    }
};


process.OutputDataReceived += (a, b) => Console.WriteLine(b.Data);
process.OutputDataReceived += (a, b) => Console.WriteLine(b.Data);
process.ErrorDataReceived += (a, b) => Console.WriteLine(b.Data);
process.ErrorDataReceived += (a, b) => Console.WriteLine(b.Data);


process.Start();
process.BeginErrorReadLine();
process.BeginErrorReadLine();
process.BeginOutputReadLine();
process.BeginOutputReadLine();


process.WaitForExit();
process.WaitForExit();
</kode>
</kode>
{{warn | Le WorkingDirectory du nouveau process sera le même que celui du process appelant et non le chemin vers l'exe du nouveau process.}}
{{warn | Le WorkingDirectory du nouveau process sera le même que celui du process appelant et non le chemin vers l'exe du nouveau process.}}

Version du 20 août 2023 à 20:27

Liens

Run a binary

using System.Diagnostics;

// in 1 line
Process.Start("/path/folder/binary", "arg1 arg2").WaitForExit();

// with ProcessStartInfo
Process.Start(new ProcessStartInfo("/path/folder/binary", "arg1 arg2")
{
    WindowStyle = ProcessWindowStyle.Hidden
})?.WaitForExit();

// read synchronously output and error
var process = Process.Start(new ProcessStartInfo("/path/folder/binary", "arg1 arg2")
{
    RedirectStandardOutput = true,
    RedirectStandardError = true,
    UseShellExecute = false  // default value
});

string processOutput = process.StandardOutput.ReadToEnd();
process.WaitForExit();

// read asynchronously output and error
var process = Process.Start(new ProcessStartInfo("/path/folder/binary", "arg1 arg2")
{
    RedirectStandardOutput = true,
    RedirectStandardError = true,
    UseShellExecute = false  // default value
});

process.OutputDataReceived += (a, b) => Console.WriteLine(b.Data);
process.ErrorDataReceived += (a, b) => Console.WriteLine(b.Data);

process.BeginErrorReadLine();
process.BeginOutputReadLine();

process.WaitForExit();
Le WorkingDirectory du nouveau process sera le même que celui du process appelant et non le chemin vers l'exe du nouveau process.

Execute shell commands

Some shell commands rewrite on the current line, to keep the same visual as the original command, use UseShellExecute = true.

var processInfo = new ProcessStartInfo
{
    FileName = "borg",
    Arguments = $"create --verbose --progress --stats --compression lz4 \"{archive}\"::{{now:%Y-%m-%d}} {paths}",
    UseShellExecute = true,
    WorkingDirectory = "/path/folder"
};
processInfo.EnvironmentVariables["BORG_PASSPHRASE"] = borgPassword;

var process = new Process()
{
    StartInfo = processInfo
};

process.Start();
process.WaitForExit();

Lister tous les processus qui utilisent un fichier