0

I am facing an issue while attempting to launch Kali Linux through Windows Subsystem for Linux (WSL) using C# code. The problem arises when I try to run commands in Kali Linux through WSL, and the output is always empty. I can see the command line blank, but the output is not captured correctly.

Here is the code snippet I am using to launch Kali Linux and run commands:

Process process = new System.Diagnostics.Process();
ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo()
{
    FileName = "wsl.exe",
    WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal,
    RedirectStandardInput = true,
    RedirectStandardOutput = true,
    UseShellExecute = false,
    CreateNoWindow = false,
    Arguments = "-d kali-linux",
};
process.StartInfo = startInfo;
if (!process.Start())
    throw new Exception("WSL failed to start, find out why");

process.StandardInput.WriteLine("ls");
process.StandardInput.Close();
process.WaitForExit();

string output = process.StandardOutput.ReadToEnd();

The issue seems to be related to how the command is passed to the bash shell in Kali Linux. I am receiving the error message "bash: line 1: $'ls\r': command not found". It appears that there is a carriage return character causing the command not to be recognized correctly.

I have tried adding an explicit newline character after sending the command, but the problem persists. Any suggestions on how to properly pass commands to Kali Linux through WSL using C# and capture the output would be greatly appreciated.

Thank you for your help!

Process process = new System.Diagnostics.Process();
ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo()
{
    FileName = "wsl.exe",
    WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal,
    RedirectStandardInput = true,
    RedirectStandardOutput = true,
    UseShellExecute = false,
    CreateNoWindow = false,
    Arguments = "-d kali-linux",
};
process.StartInfo = startInfo;
if (!process.Start())
    throw new Exception("WSL failed to start, find out why");

process.StandardInput.WriteLine("ls");
process.StandardInput.Close();
process.WaitForExit();

string output = process.StandardOutput.ReadToEnd();

0