Bonjour à tous et à toutes,

Voila, je me suis mis à développez un petit soft pour m'aider au travail. Rien de bien compliquer, je veux reproduire un winscp en mode léger pour transférer un seul et même ficher sur une 20ene ou plus de bécane via protocole pscp. Le pc d'envoie est un windows, les pc de reception souvent linux mais possible aussi sous windows.

Voici donc mon problème, j'ai ce code :


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
CheckListBox1->Visible = false;
stateSend->Visible = true;
 
STARTUPINFO si;
PROCESS_INFORMATION pi;
 
BOOL b = false;
ZeroMemory(&si, sizeof(STARTUPINFO));
si.cb = sizeof (STARTUPINFO);
ZeroMemory(&pi, sizeof (PROCESS_INFORMATION));
char parametre[200] = "\0";
char parametre2[10] = "\0";
 
for(int i = 0; i < CheckListBox1->Count; i++)
{
        if(CheckListBox1->Selected[i] == false)
        {
                AnsiString ping = " " + CheckListBox1->Items->Strings[i];
                strcpy(parametre2, ping.c_str());
                //On teste avant tout que l'on puisse communiquer avec la machine
                b = CreateProcess("ping.exe", parametre2, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
 
                if(b)
                {
                        stateSend->Font->Color = clBlue;
                        stateSend->Text = stateSend->Text + "Ping " + ping + " reussi...\r\n";
 
                        AnsiString texte =  CheckListBox1->Items->Strings[i];
                        texte = texte.Trim();
                        //exemple pscp.exe -l root -pw root 127.0.0.1:C:\\File C:\\File
                        AnsiString param = " -l " + UserCh->Text + " -pw " + MdpCh->Text + " " + texte + ":"+ OpenDialog1->FileName + " " + Sortie->Text;
                        strcpy(parametre, param.c_str());
                        b = CreateProcess("pscp.exe", parametre, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
 
                        if(b)
                        {
                                stateSend->Font->Color = clBlue;
                                stateSend->Text = stateSend->Text + "Transfert vers machine " + CheckListBox1->Items[i].Text.Trim() + " reussi...\r\n";
                        }
                        else
                        {
                                stateSend->Font->Color = clRed;
                                stateSend->Text = stateSend->Text + "Transfert vers machine " + CheckListBox1->Items[i].Text.Trim() + " code KO...\r\n"  ;
                        }
                }
                else
                {
                        stateSend->Font->Color = clRed;
                        stateSend->Text = stateSend->Text + "Ping " + ping + " Code KO...\r\n";
                }
       }

CheckListBox1 est une liste d'adresse ip.
parametre2 est initialisé à 10, c'était juste pour tester 127.0.0.1 vois si les \0 jouais sur l'efficacité de la trame.

Je cherche donc à ping la machine distante voir si je peut communiquer avec elle, et si oui, j'envoie le fichier grâce a pscp.exe

Le problème est que je doit mal utiliser CreateProcess car même le ping me retourne un code d'erreur avec un test tel que "ping 127.0.0.1"

Je ne cherche pas a savoir si createProcess est bien ou pas, si c'est du code propre, juste que ça fonctionne

S'auriez vous me dire ce que je fait mal? la doc me le dit pas, et les différents et ultra nombreux sujet du web à ce sujet ont soit été rembarré car c'est "pas du joli code", soit ben ils ont fait comme moi... ou presque

Deuxièmement: Est-il possible de récupérer avec createProcess la chaîne de retour? Un ping nous retourne ses résultats, comment les récupérer? Rediriger le resultat vers une chaîne de caractère par exemple

Merci pour votre aide.
Michael