Как скрыть окно команд используя C#

Создание консольного приложения, которое будет выполнять исполняемый файл (pagesnap.exe). Я хотел бы скрыть свое окно (pagesnap.exe) во время выполнения. Как это сделано

ProcessStartInfo Psi = new ProcessStartInfo("D:\\PsTools\\");
Psi.FileName = "D:\\PsTools\\psexec.exe";    
Psi.Arguments = @"/C \\DESK123 D:\files\pagesnap.exe";
Psi.UseShellExecute = false;
Psi.RedirectStandardOutput = true;
Psi.RedirectStandardInput = true;
Psi.WindowStyle = ProcessWindowStyle.Hidden;
Psi.CreateNoWindow = true;
Process.Start(Psi).WaitForExit();

DESK123 - это локальный ПК. Позже попробуйте это с удаленными компьютерами.

Вещи, которые я пробовал

Psi.Arguments = @"/C start /b psexec \\DESK123 D:\files\pagesnap.exe";  
Psi.Arguments = @"/b psexec \\DESK123 D:\files\pagesnap.exe";  
Psi.Arguments = @"/C psexec \\DESK123 /b D:\files\pagesnap.exe"; 
Psi.Arguments = @"/C psexec \\DESK123 D:\files\pagesnap.exe 2>&1 output.log";

Обновление: я построил Pagesnap с типом вывода в качестве приложения Windows, а не консоли. Окно cmd не открывается, сейчас. Кажется, это единственный способ для меня

1 ответ

Просто вызовите следующую функцию. Передайте аргумент как вашу команду и ваш рабочий каталог

private string BatchCommand(string cmd, string mapD)
    {


        System.Diagnostics.ProcessStartInfo procStartInfo = new System.Diagnostics.ProcessStartInfo("cmd", "/c " + cmd);
        procStartInfo.WorkingDirectory = mapD;
        // The following commands are needed to redirect the standard output.
        // This means that it will be redirected to the Process.StandardOutput StreamReader.
        procStartInfo.RedirectStandardOutput = true;
        procStartInfo.RedirectStandardError = true;
        procStartInfo.RedirectStandardInput = true;
        procStartInfo.UseShellExecute = false;
        // Do not create the black window.
        procStartInfo.CreateNoWindow = true;
        // Now we create a process, assign its ProcessStartInfo and start it
        System.Diagnostics.Process cmdProcess = new System.Diagnostics.Process();
        cmdProcess.StartInfo = procStartInfo;
        cmdProcess.ErrorDataReceived += cmd_Error;
        cmdProcess.OutputDataReceived += cmd_DataReceived;
        cmdProcess.EnableRaisingEvents = true;
        cmdProcess.Start();
        cmdProcess.BeginOutputReadLine();
        cmdProcess.BeginErrorReadLine();
        cmdProcess.StandardInput.WriteLine("ping www.google.com");     //Execute ping
        cmdProcess.StandardInput.WriteLine("exit");                  //Execute exit.
        cmdProcess.WaitForExit();

        // Get the output into a string

        return Batchresults;
    }
    static void cmd_DataReceived(object sender, DataReceivedEventArgs e)
    {
        if (e.Data != null)
            Batchresults += Environment.NewLine + e.Data.ToString();

    }

     void cmd_Error(object sender, DataReceivedEventArgs e)
    {
        if (e.Data != null)
        {
            Batchresults += Environment.NewLine + e.Data.ToString();

        }
    }
Другие вопросы по тегам