9
votes

Existe-t-il un moyen de chasser le cache DNS d'une application WPF C # WPF? (sur XP, Vista, Win7)

Y a-t-il un moyen de rincer le cache DNS d'une application C # WPF? L'application serait exécutée sur XP, Vista ou Windows 7.


6 commentaires

BrannickDevice.blogspot.com/2006/04/...


@Aaron: Dommage que vous n'aviez pas posté comme réponse. Je voterais pour cela.


@kbrimington, je ne me sentais pas de bonnes réponses pour le premier résultat que j'ai trouvé dans Google (sourire): Tinyurl.com/ 2bx8ngu


@Aaron: assez juste. Bien sur vous.


3 ans plus tard et c'est le premier résultat. Ce poste est le 7ème;).


5 ans plus tard, vous devez regarder dans l'archive Internet: web.archive.org/web/20090409081630/http://... ;)


5 Réponses :


10
votes

Ceci peut être la solution du pauvre homme, mais vous pouvez utiliser system.diagnostiques.process pour lancer ipconfig / flushdns . .


4 commentaires

Pourrait aussi bien, semble-t-il un gaspillage d'effort pour creuser le Pinvoke.


pas une mauvaise baisse - pourrait attendre de voir si quelqu'un d'autre connaît quelque chose enterré dans le .NET Framework - vous penseriez que ce serait dans la classe DNS si n'importe où, mais je ne vois rien là-bas


Tant que la portabilité envers d'autres plates-formes n'est pas une préoccupation, irait avec ceci.


Cela ne se sent pas comme la solution idéale, mais la fonction Dnsapi.dll Pinvoke semble plus longue.



29
votes

Vous pouvez utiliser une fonction de "dnsapi.dll" de Microsoft. Cela vous permettra de le faire complètement de manière programmatique:

using System.Runtime.InteropServices;

[DllImport("dnsapi.dll",EntryPoint="DnsFlushResolverCache")]
private static extern UInt32 DnsFlushResolverCache ();

public static void FlushMyCache() //This can be named whatever name you want and is the function you will call
{
    UInt32 result = DnsFlushResolverCache();
}


3 commentaires

Je cours le code et ça marche, mais comment savoir que le processus a été effacé avec succès le cache DNS ou non?


DNSFLUSHRESOLVERCACHACHACHE () est une fonction non documentée, ce qui signifie que son avenir n'est pas garanti.


Cela peut-être utilisé pour travailler, mais essayer cela dans Win10 a actuellement produit l'erreur de fonction incorrecte. Il n'est également plus inscrit dans les documents MSDN et ne fait pas partie des bibliothèques de Pinvoke que je vois à Nuget.



4
votes

Essayez ceci -

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();


2 commentaires

Cela semble un peu hacky de le faire en exécutant un processus terminal. Je m'attends à ce que l'affiche originale préfère une autre manière.


Pourquoi ne pas simplement commencer directement ipconfig / flushdns ?



6
votes

J'ai recherché sur Internet et je ne pouvais pas trouver pour affleurer une seule entrée DNS. Travailler sur quelque chose pour avoir échoué à la sauvegarde du datacenter, cela est nécessaire pour moi. J'ai dissimulé le DNSFLUSHRESOLVERCACHEYRY_W et avez trouvé le SIG P / invoke ci-dessous. J'utilise la méthode Dnsquery avec le drapeau Querynowireflag et Nohostfile. S'il y a des résultats, alors j'appelle Dnsflushresolvercachetry_w. Cela pourrait être de bonnes informations pour quelqu'un à l'avenir cherche à faire la même chose xxx


0 commentaires

0
votes

Essayez ceci:

    static void flushDNS()
    {
        string flushDnsCmd = @"/C ipconfig /all";
        try
        {
            var process = new Process
            {
                StartInfo = new ProcessStartInfo("cmd.exe", flushDnsCmd)

            };
            process.Start();
            
            process.WaitForExit();
            Console.WriteLine(String.Format("Successfully Flushed DNS:'{0}'", flushDnsCmd), EventLogEntryType.Information);

        }
        catch (Exception exp)
        {
            Console.WriteLine(String.Format("Failed to Flush DNS:'{0}' . Error:{1}", flushDnsCmd, exp.Message), EventLogEntryType.Error);
        }
    }


0 commentaires