Lancer une application dos sans fenêtre

Signaler
Messages postés
125
Date d'inscription
dimanche 28 février 2010
Statut
Membre
Dernière intervention
21 juin 2015
-
Messages postés
125
Date d'inscription
dimanche 28 février 2010
Statut
Membre
Dernière intervention
21 juin 2015
-
Salut tous le monde,

petite question, j'ai ceci :
ProcessStartInfo kill = new ProcessStartInfo(@"C:\Windows\pstool\pskill.exe");
kill.FileName = @"C:\Windows\pstool\pskill.exe";
kill.Arguments = "\\\" + IP + " -u Administrateur -p ******* thunderbird.exe";
kill.CreateNoWindow = true;
Process s_kill = Process.Start(kill);


Ça marche très bien, par contre j'ai un soucis (qui est logique) avec ceci :

"kill.CreateNoWindow = true;"

grâce a ça la fenêtre Dos qui lance "pskill" n'est pas affichée, par contre "pskill" lance sa propre fenêtre dos après.. , sachant que ce Process est lancé dans une boucle de 240 valeurs et que l'action n'est pas immédiate, l’écran est saturé et c'est vraiment pas sympa.

Ma question est donc la suivante : par qu'elle moyen puis-je empêcher la deuxième fenêtre Dos de s'afficher ?

Merci d'avance.


-La constante d'une personne est la variable d'une autre.
-Il y a deux manières d'écrire des programmes sans erreurs. Seule la troisième marche
-Tout programme a (au moins) deux buts : celui pour lequel il a été écrit, et celui pour lequel il ne l'a pas

5 réponses

Messages postés
1540
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
1 août 2013
12
Salut,

je ne suis pas sûr que tu puisses être maître sur ces fenêtres là.
Ma première idée a été de chercher une option de pskill pour un mode genre "silencieux" (pas mal de commandes le proposent), mais apparemment cet outil ne la possède pas.

Bonne chance dans tes recherches
Messages postés
125
Date d'inscription
dimanche 28 février 2010
Statut
Membre
Dernière intervention
21 juin 2015
2
Ouais cela a été ma première idée aussi.
je voulais le faire avec Taskskill.exe mais j'ai des erreurs server RPC ..
Donc j'utilise ce petit groupe d'utilitaire vraiment sympa, mais voila j'ai ce problème.
J'ai aussi des problème de performance, une fois le logiciel lancé, la fenêtre ce bloc jusqu'à la fin de l’exécution. Dur de coder !

-La constante d'une personne est la variable d'une autre.
-Il y a deux manières d'écrire des programmes sans erreurs. Seule la troisième marche
-Tout programme a (au moins) deux buts : celui pour lequel il a été écrit, et celui pour lequel il ne l'a pas
Messages postés
1540
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
1 août 2013
12
pour ton problème de blocage durant l'exécution tu as tenter de threader tout ça ?
Messages postés
793
Date d'inscription
mardi 8 juillet 2003
Statut
Membre
Dernière intervention
10 février 2021
8
Bonjour,
Pour ma part j'utilise ShellExecuteEx. cela me permet de donner en paramètre si je veux voir la fenêtre ou non ou tout autre état Minimisé, maximisé. De plus on est pas bloqué et si on veut attendre on récupère le handle du process et attend l'évènement.
Une recherche sur MSDN de ShellexecuteEx te donnera pas mal d'indications.
Bon codage


louis
Messages postés
125
Date d'inscription
dimanche 28 février 2010
Statut
Membre
Dernière intervention
21 juin 2015
2
Merci pour les réponses, pour les thread j'y ai pensé mais euh.. j'y connais absolument rien.

Merci pour ShellExecuteEx , je vais essayer voir ce que ça donne.
Au cas ou voila le code si vous avez d'autre idées :


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net.NetworkInformation;
using System.IO;
using System.Net;
using System.Diagnostics;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        /*--------------------------------------------------------------FONCTION @IP------------------------------------------------------------*/
        /*--------------------------------------------------------------------&-----------------------------------------------------------------*/
        /*-------------------------------------------------------------RECUP PAR DNS------------------------------------------------------------*/

        string[] GetIPaddresses(string computername)
        {
            string[] sAddr = null;
            IPAddress[] addr = Dns.Resolve(computername).AddressList;
            if (addr.Length > 0)
            {
                sAddr = new String[addr.Length];
                for (int i = 0; i < addr.Length; i++)
                    sAddr[i] = addr[i].ToString();
            }
            return sAddr;
        }

        /*--------------------------------------------------------------FONCTION PING------------------------------------------------------------*/
        /*--------------------------------------------------------------------&-----------------------------------------------------------------*/
        /*---------------------------------------------------------------MAJ de Pref-----------------------------------------------------------*/

        private static bool ProcessIP(String IP, string sFichier, string sFichier1, string sFichier2, string sFichier3)
        {
            if (IP.Length > 0)
            {
                const int iTimeout = 120;
                byte[] bBuffer = new byte[32];
                PingReply reply = new Ping().Send(IP, iTimeout, bBuffer);
                if (reply.Status == IPStatus.Success)
                {
                    String sName = Path.Combine(@"\" + IP, "Profiles");
                    if (Directory.Exists(sName))
                    {
                        string sDirect_name_dist = String.Empty;
                        foreach (String s in Directory.GetDirectories(sName, "*.default"))
                            sDirect_name_dist = s;

                        if (sDirect_name_dist.Length != 0)
                        {
                            File.Copy(sFichier, Path.Combine(@"\" + sDirect_name_dist, "impab-89.mab"), true);
                            File.Copy(sFichier1, Path.Combine(@"\" + sDirect_name_dist, "impab-90.mab"), true);
                            File.Copy(sFichier2, Path.Combine(@"\" + sDirect_name_dist, "impab-91.mab"), true);
                            File.Copy(sFichier3, Path.Combine(@"\" + sDirect_name_dist, "impab-92.mab"), true);

                            string sPrefs = "user_pref("ldap_2.servers.01NEUILLY_1.description","01-NEUILLY");" + Environment.NewLine +
                                            "user_pref("ldap_2.servers.01NEUILLY_1.dirType", 2);" + Environment.NewLine +
                                            "user_pref("ldap_2.servers.01NEUILLY_1.filename","impab-89.mab"" + ");" + Environment.NewLine +
                                            "user_pref("ldap_2.servers.02COLMAR.description","02-COLMAR");" + Environment.NewLine +
                                            "user_pref("ldap_2.servers.02COLMAR.dirType", 2);" + Environment.NewLine +
                                            "user_pref("ldap_2.servers.02COLMAR.filename","impab-90.mab");" + Environment.NewLine +
                                            "user_pref("ldap_2.servers.03-FASSETTA.description","03-FASSETTA");" + Environment.NewLine +
                                            "user_pref("ldap_2.servers.03-FASSETTA.dirType", 2);" + Environment.NewLine +
                                            "user_pref("ldap_2.servers.03-FASSETTA.filename","impab-91.mab"" + ");" + Environment.NewLine +
                                            "user_pref("ldap_2.servers.10-GUK & GEMS.description","10-GUK & GEMS");" + Environment.NewLine +
                                            "user_pref("ldap_2.servers.10-GUK & GEMS.dirType", 2);" + Environment.NewLine +
                                            "user_pref("ldap_2.servers.10-GUK & GEMS.filename","impab-92.mab");";

                            StreamWriter sw = new StreamWriter(@"\" + sDirect_name_dist + @"\prefs.js", true);
                            sw.WriteLine(sPrefs);
                            sw.Close();

                            return true;
                        }
                    }
                }
            }
            return false;
        }

        /*--------------------------------------------------------------FONCTION COUNT-----------------------------------------------------------*/
        /*-------------------------------------------------------------------des----------------------------------------------------------------*/
        /*---------------------------------------------------------------lignes file-----------------------------------------------------------*/

        static long CountLines(string fileName)
        {
            char[] buffer = new char[32 * 1024]; //lit 32K char à chaque fois
            System.IO.TextReader reader;
            int total = 1; //tout fichier contient au moins une ligne
            int read;
            if (System.IO.File.Exists(fileName))
            {
                reader = System.IO.File.OpenText(fileName);
                while ((read = reader.Read(buffer, 0, buffer.Length)) > 0)
                {
                    for (int i = 0; i < read; i++)
                    {
                        if (buffer[i] == '\n')
                        {
                            total++;
                        }
                    }
                }
                //nettoyage des variables
                reader.Close();
                reader.Dispose();
                reader = null;
            }
            return total;
        }

        /*--------------------------------------------------------------DEBUT PROGRAMME-----------------------------------------------------------*/

        private void button1_Click(object sender, EventArgs e)
        {
            richTextBox1.Text = "";
            string sUser = Environment.UserName;
            string sComputer_name = Environment.MachineName;
            string[] sComputer_IP = GetIPaddresses(sComputer_name);
            string sListe = @"C:\listes.txt";
            string sVers = Environment.OSVersion.ToString();
            string sVersion = sVers.Substring(21, 1);
            string sFolder = "";

            //Verification du system 6 pour Vista et Seven, 5 pour XP
            if (sVersion == "6")
            {
                sFolder = @"C:\Users" + sUser + @"\AppData\Roaming\Thunderbird\Profiles";
            }
            else
            {
                sFolder = @"C:\Documents and Settings\m.legendre\Application Data\Thunderbird\Profiles";
            }

            foreach (String s in Directory.GetDirectories(sFolder, "*.default"))
                sFolder = s;

            string Sscript = sFolder + "/prefs.js";
            string test = "01NEUILLY.filename";
            string test2 = "02COLMAR.filename";
            string test3 = "03FASSETTA.filename";
            string test4 = "10GUKGEMS.filename";
            string neuilly "", colmar "", fassetta = "", guk = "";
            char[] trim_cara = { '"', ')', ';'}; //permet de supprimer les caracteres listés

            String[] line = File.ReadAllLines(Sscript);
            long cl = CountLines(Sscript);

            //Recupere la ligne recherchée
            for (int i = 12; i < cl - 1; i++)
            {
                if (line[i].ToLower().Contains(test.ToLower()))
                {
                    neuilly = i.ToString();
                }
                else if (line[i].ToLower().Contains(test2.ToLower()))
                {
                    colmar = i.ToString(); 
                }
                else if (line[i].ToLower().Contains(test3.ToLower()))
                {
                    fassetta = i.ToString();
                }
                else if (line[i].ToLower().Contains(test4.ToLower()))
                {
                    guk = i.ToString();
                }
            }

            //Recupère le mot recherché dans la ligne
            neuilly = line[Convert.ToInt32(neuilly)].Substring(48).Trim(trim_cara).ToString();
            colmar = line[Convert.ToInt32(colmar)].Substring(47).Trim(trim_cara);
            fassetta = line[Convert.ToInt32(fassetta)].Substring(49).Trim(trim_cara);
            guk = line[Convert.ToInt32(guk)].Substring(48).Trim(trim_cara);

            string sFichier = Path.Combine(sFolder, neuilly);
            string sFichier1 = Path.Combine(sFolder, colmar);
            string sFichier2 = Path.Combine(sFolder, fassetta);
            string sFichier3 = Path.Combine(sFolder, guk);

            if (File.Exists(sFichier) && File.Exists(sFichier1) && File.Exists(sFichier2) && File.Exists(sFichier3))
            {
            second:
                if (File.Exists(sListe))
                {      
                    String[] IPs = File.ReadAllLines(sListe);
                    if (IPs.Length > 0 && IPs[0] != "5")
                    {
                        richTextBox1.Text += "Lecture du Fichier Liste \nsuppression des @ :" + Environment.NewLine;
                        string value = Convert.ToString(Convert.ToInt32(IPs[0]) + 1);
                        File.Delete(sListe);

                        StreamWriter sw = new StreamWriter(sListe, false);
                        sw.WriteLine(value);
                        sw.Close();

                        for (int i = 1; i < IPs.Length; i++)
                        {
                            StreamWriter sw2 = new StreamWriter(sListe, true);
                            sw2.WriteLine(IPs[i]);
                            sw2.Close();
                            
                            progressBar1.Minimum = 0;
                            progressBar1.Maximum = IPs.Length;
                            progressBar1.Value = i;
                            while (progressBar1.Value < progressBar1.Maximum)
                            {
                                progressBar1.Value++;
                            }

                            if (ProcessIP(IPs[i], sFichier, sFichier1, sFichier2, sFichier3))
                            {
                                richTextBox1.Text += "-" + IPs[i] + Environment.NewLine;
                                IPs[i] = String.Empty;
                                // Ecriture du tableau d'IP en supprimant les lignes vides
                                File.WriteAllLines(sListe, IPs.Where(s => s.Trim() != string.Empty).ToArray());
                            }
                        }
                    }
                    else 
                    {
                        File.Delete(@"C:\listes.txt");
                        goto second; 
                    }            
                }
                else
                {
                    ProcessStartInfo info = new ProcessStartInfo("at.exe", "/DELETE /YES");
                    Process proc = Process.Start(info);
                    proc.Close();

                    ProcessStartInfo infos = new ProcessStartInfo("at.exe", "12:35 /EVERY:l "C:/ThundUp.exe"");
                    Process procs = Process.Start(infos);
                    procs.Close();

                    StreamWriter count = new StreamWriter(sListe, false);
                    count.WriteLine("0");
                    count.Close();

                    for (int i = 3; i < 250; i++)
                    {
                        progressBar1.Minimum = 3;
                        progressBar1.Maximum = 250;
                        progressBar1.Value = i;
                        while (progressBar1.Value < progressBar1.Maximum)
                        {
                            progressBar1.Value++;
                        }
                        //Exclue l'@IP de la machine qui lance la MAJ 
                        if (i == Convert.ToInt32(sComputer_IP[0].Substring(10)))
                        {
                            i++;
                        }
                        //cree ip et lance requete icmp
                        string IP = "192.168.2." + i;

                        if (!ProcessIP(IP, sFichier, sFichier1, sFichier2, sFichier3))
                        {// Le Ping n'a pas fonctionné, on ajoute l'IP a la liste
                            StreamWriter sw = new StreamWriter(sListe, true);
                            sw.WriteLine(IP);
                            sw.Close();

                            richTextBox1.Text += IP + " N'a pas Fonctionné" + Environment.NewLine + "Ajout de cette adresse dans le fichier listes" + Environment.NewLine + Environment.NewLine;
                        }
                        else
                        {
                            //Ferme de force Thunderbird
                            ProcessStartInfo kill = new ProcessStartInfo(@"C:\Windows\pstool\pskill.exe");
                            kill.FileName = @"C:\Windows\pstool\pskill.exe";
                            kill.Arguments = "\\\" + IP + " -u Administrateur -p Ca2ourg thunderbird.exe";
                            kill.CreateNoWindow = true;
                            Process s_kill = Process.Start(kill);

                            StreamWriter add = new StreamWriter("C:\\listes_ok.txt", true);
                            add.WriteLine(IP);
                            add.Close();
                            richTextBox1.Text += "Copie Ok pour " + IP + Environment.NewLine + Environment.NewLine; 
                        }
                    }
                }
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            File.Delete(@"C:\listes.txt");
            File.Delete(@"C:\listes_ok.txt");
            richTextBox1.Text = "Fichier Supprimer \nRelancer la mise à jour";
            button1_Click(1,e);
        }

        private void button3_Click(object sender, EventArgs e)
        {
            string path = @"C:\listes_ok.txt";

            if (File.Exists(path))
            {
                ProcessStartInfo open = new ProcessStartInfo(path);
                Process Open = Process.Start(open);
                Open.Close();
            }
            else
            {
                richTextBox1.Text = "";
                richTextBox1.Text = "La liste n'existe pas";
            }
        }
    }
}




Merci

-La constante d'une personne est la variable d'une autre.
-Il y a deux manières d'écrire des programmes sans erreurs. Seule la troisième marche
-Tout programme a (au moins) deux buts : celui pour lequel il a été écrit, et celui pour lequel il ne l'a pas