Abrir Aplicativos com um programa Cliente/Servidor

Galera estou com um problema aqui.
Eu tenho um programa cliente/servidor que tem o seguinte objetivo, o cliente, manda uma msg para o servidor ( o nome de um programa, como “cmd” ),
e o Servidor apenas tem que abrir o DOS (neste caso), ta tudo feito, só falta a parte de abrir o programa. hehehe

Segui os trechos de códigos mais relevantes.

O modo como eu implementei o método “executaPrograma” funciona em parte, ou seja ele só abre alguns programas, como: notepad, calculadora, mais
ele não consegui abrir o cmd.

Outra coisa, quando eu digito um programa que está com o nome(comando) errado ele da um erro tem como tratar isso?

Obrigado

    private void executaPrograma( String msg ) throws IOException
    {
        displayMessage("\nMétodo ExecutarPrograma");
        
        msg = msg + ".exe";
        
        ProcessBuilder builder = new ProcessBuilder(msg);
        
        try {  
            Process process = builder.start();  
            try {  
                TimeUnit.SECONDS.sleep(10);  
            } catch (InterruptedException ignored) {  
            }  
            process.destroy();  
        } catch (IOException e) {  
            e.printStackTrace();  
        } 
        //Runtime.getRuntime().exec("taskkill /f /im cmd.exe");
        /*Process pro = Runtime.getRuntime().exec("cmd /C C:\\cmd.exe"); 
        try{
            pro.waitFor();
        }catch(InterruptedException e )
        {

        }*/
    }

    private void processConnection() throws IOException
    {
        String msg;
        do{
            msg = dis.readUTF();
            displayMessage( "\nSERVER >>> " + msg);
            executaPrograma(msg);
            //java.awt.Desktop.getDesktop().open( new File( msg ) );
            //Runtime.getRuntime().exec("taskkill /f /im cmd.exe");
            
        }while ( !msg.equals("SERVER >>> EXIT") );
    }