Executar um exe & processar o resultado em uma string [RESOLVIDO]

Antes de tudo eu já pesquisei no fórum, e nos tópico aqui apresentados eu não consegui achar uma solução.

Bem o que eu quero fazer é uma aplicação que mostre a lista de softwares instalados no PC, eu achei num tópico aqui um pequeno executavel(soli.exe) que faz isso, pois bem a sintaxe para que ele passe os aplicativos instalados é:

[code]
C:\DEVELOPMENT\Projetos\src\cliente\extra>soli
SoftwareList 2.1 - © 2004 Renato S. da Silva

usage: soli directory [hostname]

C:\DEVELOPMENT\Projetos\src\cliente\extra>soli c:\development junior
Software list was created at c:\development\junior.soli.txt[/code]

ele gera um txt +/- assim:

[quote]

Advanced Tools
Atualização de Segurança para Windows XP (KB883939)
Atualização de Segurança para Windows XP (KB890046)
Atualização de Segurança para Windows XP (KB896358)
Atualização de Segurança para Windows XP (KB896422)
Atualização de Segurança para Windows XP (KB896428)
Atualização de Segurança para Windows XP (KB900930)
Atualização de Segurança para Windows XP (KB901214)
Atualização de Segurança para Windows XP (KB903235)
Atualização para Windows XP (KB898461)
BitComet 0.57
CC_ccProxyMSI
CC_ccStart
ccCommon
Cdrom List Creator
Drive Image
Extensão do HighMAT para o Assistente para Gravação em CD do Microsoft Windows XP
Futebol Theme
Google Earth Plus
hkSFV (remove only)
IconTweaker
IrfanView (remove only)
J2SE Development Kit 5.0 Update 4
J2SE Runtime Environment 5.0 Update 4
JUDE Community 1.5.2
jv16 PowerTools 1.4.1
K-Lite Mega Codec Pack 1.30
…[/quote]

Pelo promtp do DOS vai que é uma beleza, agora eu estava querendo usar dentro de um JAR, para mostrar para um professor na faculdade, só que ai, deu branco total…

[code]
import java.io.File;
import java.io.IOException;

public class Soli {

private static Process softlist;

public static void main(String[] args) {
    try {
        softlist = Runtime.getRuntime().exec("cmd /C C:\DEVELOPMENT\Projetos\src\cliente\extra\soli C:\ JUNIOR");
        softlist.waitFor();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    File inf = new File("/JUNIOR.soli.txt");
    if(inf.exists()){
        System.out.println("Arquivo salvo em : " + inf.getAbsolutePath());
    }
}

}[/code]

Não gera nenhum Exception, nada, e nem a lista é feita…

além disso o professor, quer que use Socket. então eu teria que pegar o txt gerado, e concatenar tudo em uma única String, usando para separar cada linha um delimitador pode ser “;”, e no servidor ele separa cada item em uma linha(essa parte de separar os itens eu sei, usando StringTokenizer).

O que eu não to conseguindo, é fazer com que ele seja executado da forma correta e crie o txt.

Outra coisa, como eu faço dps, que estiver tudo dentro do JAR(incluindo o soli.exe) ele funcione como se estivesse sendo executado pelo Eclipse.

Estou perguntando pois, preciso ter o soli.exe empacotado junto com o JAR para fazer uma demosntração no lab da faculdade.

Se você puderem me ajudar.

Obrigado. :thumbup:

ps.: se o autor do soli.exe estiver presente no fórum, gostaria de sabe se não tem problema de utilizar o aplicativo dele em uma demonstração na faculdade.

Eu consegui fazer com ele funcione:

[code]
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;

/*

  • Created on 01/08/2005 16:47:20
  • @author Jair Priori Minharo Júnior / Administrador
    */

public class Soli {

private static Process softlist;
private static String nomHost;
private static String dirSalva = "C:\TEMP ";
private static String spc = " ";

public static void main(String[] args) {
    String ls_str;
    PegaNomeIP();
    try {
        softlist = Runtime.getRuntime().exec("cmd /C C:\soli C:\ "+nomHost);
        softlist.waitFor();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    try {
        BufferedReader in = new BufferedReader(new FileReader("/"+nomHost+".soli.txt"));
        System.out.println("Lendo arquivo...");
        while ((ls_str = in.readLine()) != null) {
            System.out.println(ls_str);
        }
        in.close();
    } catch (FileNotFoundException e1) {
        e1.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    File inf = new File("/"+nomHost+".soli.txt");
    if(inf.exists()){
        System.out.println("Arquivo salvo em : " + inf.getAbsolutePath());
        inf.delete();
        System.err.println("Arquivo DELETADO");
    }
}

public static String PegaNomeIP(){
    try {
        InetAddress myAddress = InetAddress.getLocalHost();
        nomHost = myAddress.getHostName();
    } catch (UnknownHostException e) {
        e.printStackTrace();
    }
    return nomHost;
}

}[/code]

mas se eu tento executar ele passando uma outra pasta, como a que foi mostrada acima:

ele nao funciona.

Eu fiz com que ele leia o arquivo, só não estou conseguindo pegar todas as linhas de juntar em uma única string:

ex.:
linha1;linha2;linha3;…;linhaN

se alguém puder me ajudar.

Resvolvi.

[code]
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;

public class Soli {

private static Process softlist;
private static String nomHost;
private static String dirSalva = "C:\ ";
private static String dirSoli = "C:\DEVELOPMENT\Projetos\Projet~1\src\extra";
private static String spc = " ";
private static String le,linha,recebe = "";
private static String path = System.getProperty("user.dir");

public static void main(String[] args) {
    PegaNomeIP();
    try {
        softlist = Runtime.getRuntime().exec("cmd /C "+dirSoli+"/soli "+dirSalva+nomHost);
        softlist.waitFor();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    try {
        BufferedReader in = new BufferedReader(new FileReader("/"+nomHost+".soli.txt"));
        System.out.println("Lendo arquivo...");
        linha += in.readLine() +";";
        while ((le = in.readLine()) != null) {

// System.out.println(le);
recebe += le + “;”;
}
System.out.println(recebe);
in.close();
} catch (FileNotFoundException e1) {
e1.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
File inf = new File("/"+nomHost+".soli.txt");
if(inf.exists()){
System.out.println("Arquivo salvo em : " + inf.getAbsolutePath());
inf.delete();
System.err.println(“Arquivo DELETADO”);
}
}

public static String PegaNomeIP(){
    try {
        InetAddress myAddress = InetAddress.getLocalHost();
        nomHost = myAddress.getHostName();
    } catch (UnknownHostException e) {
        e.printStackTrace();
    }
    return nomHost;
}

}[/code]