Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Débutant] Question sur la compilation

    14 juin 2020 à 11:09:42

    Bonjour à tous !

    Je m’intéresse depuis peu au C#, et je me suis donc amusé a créer un petit programme en application console. Une fois le programme fonctionnel sur mon poste, je me suis dit super ! je vais tester mon petit programme sur un autre poste afin de vérifier que tout fonctionne correctement aussi.

    Et la, vous vous en doutez, à mon grand désarroi, c'est un FAIL :D 

    J'ai générer mon programme, qui contient 5 éléments sur mon premier test. Je me suis donc douté qu'il fallait que j'aille fouiller les options, il devait forcement avoir quelque chose.

    J'ai modifié le mode déploiement dans les paramètre du profil, et j'ai choisis "Autonome", au lieu de "Dépendant du Framework". J'ai maintenant un dossier qui convient beaucoup plus de fichiers lors de la génération, mais j'ai le même problème. En configuration dans le profil, je suis bien "All | Any CPU".

    Auriez-vous une idée sur ce que j'aurais pu manquer ? 

    Ah, et si vous avez 5 minutes, je ne suis pas contre un retour sur mon programme, je suis sur d'avoir fais des bêtises et qu'il y a moyen d'optimiser : 

    Merci d'avance pour vos retour 

    using System;
    using System.Security.Cryptography;
    
    namespace flusdns
    {
        class Program
        {
            static void Main(string[] args)
            {
               
                Console.ForegroundColor = ConsoleColor.DarkGreen;
                CentrerLeTexte("----------------");
                CentrerLeTexte("QUINTE FLUSH DNS");
                CentrerLeTexte("BY MASSOU");
                CentrerLeTexte("----------------");
                Console.WriteLine("\n");
                Console.WriteLine("Flush Option 1 : Light (No restart needed)");
                Console.WriteLine("Flush Option 2 : Full (restart needed)");
                Console.WriteLine("\n");
                Console.WriteLine("Enter your choice (1 or 2)");
    
                bool CheckResult = false;
                while (!CheckResult)
                {
                    string result = Console.ReadLine();
                    if (result == "1")
                    {
                        option1();
                        Console.WriteLine("Press any key to exit");
                        Console.ReadKey();
                        CheckResult = true;
                    }
                    else if (result == "2")
                    {
                        option2();
                        Console.WriteLine("Did you want to restart now ? (Yes / No)");
                        bool CheckResult_R = false;
                        while (!CheckResult_R)
                        {
                            string Result_R = Console.ReadLine();
                            if ((Result_R == "Yes") || (Result_R == "yes"))
                            {
                                option_restart();
                                CheckResult_R = true;
                            }
                            else if ((Result_R == "No") || (Result_R == "no"))
                            {
                                Console.WriteLine("Press any key to exit");
                                Console.ReadKey();
                                CheckResult_R = true;
                            }
                            else
                            {
                                Console.WriteLine("Invalid, please enter Yes or No");
                            }
                        }
                            CheckResult = true;
                    }
                    else
                    {
                        Console.WriteLine("Invalid, please enter 1 or 2");
                    }
                }
            }
    
            private static void CentrerLeTexte(string texte)
            {
                int nbEspaces = (Console.WindowWidth - texte.Length) / 2;
                Console.SetCursorPosition(nbEspaces, Console.CursorTop);
                Console.WriteLine(texte);
            }
    
            private static void option1()
            {
                System.Diagnostics.Process process = new System.Diagnostics.Process();
                System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
                startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
                startInfo.FileName = "cmd.exe";
                startInfo.Arguments = "/C ipconfig /flushdns ";
                process.StartInfo = startInfo;
                process.Start();
                process.WaitForExit();
            }
    
            private static void option2()
            {
                System.Diagnostics.Process process = new System.Diagnostics.Process();
                System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
                startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
                startInfo.FileName = "cmd.exe";
                startInfo.Arguments = "/C ipconfig /flushdns " +
                        "&ipconfig /registerdns " +
                        "& ipconfig /release " +
                        "& ipconfig /renew  " +
                        "& netsh winsock reset " +
                        "&echo Sucess, please restart your computer";
                process.StartInfo = startInfo;
                process.Start();
                process.WaitForExit();
            }
    
            private static void option_restart()
            {
                System.Diagnostics.Process process = new System.Diagnostics.Process();
                System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
                startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
                startInfo.FileName = "cmd.exe";
                startInfo.Arguments = "/c shutdown /r";
                process.StartInfo = startInfo;
                process.Start();
                process.WaitForExit();
            }
    
        }
    }
    



    • Partager sur Facebook
    • Partager sur Twitter
      14 juin 2020 à 18:13:45

      L'utilisation de programmes externes (cmd.exe, ipconfig.exe/.com, etc...), c'est pas le gage d'une application très fiable.

      Vous manquez de tout contrôle sur les événements et autres erreurs possibles (problèmes de droits, d'environnement initialisé ou pas, etc...).

      Je vous conseillerai d'utiliser les API plutôt que les commandes externes.

      Cela rendre votre programme beaucoup moins dépendant de la configuration particulière de la machine hôte.

      J'ai donc déjà posé le doigt sur un gros problème de déploiement qu'est votre dépendance énorme à l’environnement (valeur du PATH, droits, version de framework installé, etc...).

      En utilisant les API, votre IDE sera plus à même de générer des packages de déploiement cohérents avec vos dépendances.

      Cela ne fera pas de miracle mais simplifierait grandement les problématiques de déploiement.

      Après, sans les messages d'erreurs précis, il est difficile de plus vous aider.

      • Partager sur Facebook
      • Partager sur Twitter
      Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
        15 juin 2020 à 9:57:45

        Je vais passer par les API pour réaliser de nouveaux tests, la dépendance à la machine hôte me semble maintenant évident avec votre remarque.

        Merci pour le retour éclairé ! 

        • Partager sur Facebook
        • Partager sur Twitter

        [Débutant] Question sur la compilation

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown