有没有办法从C#WPF应用程序中刷新DNS缓存?(在XP、Vista、Win7上)有没有办法从C#WPF应用程序中刷新DNS缓存?该应用程序将在XP、Vista或Windows7上运行。这可能是一个穷人的解决方案,但您可以使用System.Diagnostics.Process启动ipconfig/flushdns。您可以使用Microsoft的“dnsapi.dll”中的函数。这将允许您完全以编程方式执行此操作:使用System.Runtime.InteropServices;[DllImport("dnsapi.dll",EntryPoint="DnsFlushResolverCache")]privatestaticexternUInt32DnsFlushResolverCache();publicstaticvoidFlushMyCache()//这个可以随便命名,就是你要调用的函数{UInt32result=DnsFlushResolverCache();我测试了这个并且它工作正常。试试这个——System.Diagnostics.Processprocess=newSystem.Diagnostics.Process();System.Diagnostics.ProcessStartInfostartInfo=newSystem.Diagnostics.ProcessStartInfo();startInfo.WindowStyle=System.Diagnostics.ProcessWindowStyle.Hidden;开始信息。文件名="cmd.exe";startInfo.Arguments="/Cipconfig/flushdns";process.StartInfo=startInfo;过程。开始();我在Internet上搜索,找不到刷新的单个dns条目。我需要处理故障转移到备份数据中心。我在下面解释了DnsFlushResolverCacheEntry_W和p/invokesig。我使用带有QueryNoWireFlag和NoHostFile标志的DnsQuery方法。如果有任何结果,我将调用DnsFlushResolverCacheEntry_W。Thismightbegoodinfoforanyoneliketodothisinfutureaswell(OnXP,Vista,Win7)所有内容共享,如果它对你有用并且你需要了解更多关于C#学习教程,我希望你会更加注意它—//////从DNS解析器缓存中删除给定主机名的所有相关DNS记录。//////要从解析器缓存中刷新的主机名。///成功则返回1,失败则返回0。没有返回其他错误信息。//////DnsFlushResolverCacheEntry_W是一种未记录的方法。从反汇编器来看,此方法有两个可能的///返回值0或1。如果参数为null或_R_ResolverFlushCacheEntry返回的内容///不是零,则返回值为零。当_R_ResolverFlushCacheEntry//返回值为1时。基于此和方法测试,假设1用于指示成功。///调用此方法后查询DNS解析器缓存不返回任何结果。//////__stdcallDnsFlushResolverCacheEntry_W(x)///....///6DC12729xoresi,esi//零esi///6DC1272Bcmp[ebp+arg_0],esi//检查主机名是否为空///6DC1272Ejzloc_6DC1D8B8//跳转到结束,返回值为0。///6DC12734mov[ebp+ms_exc.registration.TryLevel],esi///6DC12737pushesi//为方法推送3个参数,第二个是主机名,其他为null///6DC12738push[ebp+arg_0]///6DC1273Bpushesi///6DC1273Ccall_R_ResolverFlushCacheEntry@12//调用此方法///6DC12741mov[ebp+var_1C],eax//将返回值存储在本地///6DC12744mov[ebp+ms_exc.registration.TryLevel],0FFFFFFFEh///6DC1274B///6DC1274Bloc_6DC1274B:///6DC1274Bcmp[ebp+var_1C],esi///6DC1274Ejnzloc_6DC1D8E7//错误?跳转到执行etw然后返回0的块///6DC12754xoreax,eax//成功?将eax设置为零///6DC12756inceax//结果为0,递增1。成功返回值为1///6DC12757call__SEH_epilog4///6DC1275Cretn4//////6DC1D8B8xoreax,eax//将返回值设置为零///6DC1D8BAjmploc_6DC12757//跳转到结尾//////6DC1D8E7moveax,_WPP_GLOBAL_Control///6DC1D8ECcmpeax,offset_WPP_GLOBAL_Control///6DC1D8F1jzshortloc_6DC1D8B8///6DC1D8F3testbyteptr[orteax+1Ch],40h///6DC1D8loc_6DC1D8B8//这可能是在测试一些用于指示是否启用ETW的标志///6DC1D8F9push[ebp+var_1C]///6DC1D8FCpushoffsetdword_6DC22494///6DC1D901push0Dh///6DC1D903pushxdwordptr[ea+14h]///6DC1D906pushdwordptr[eax+10h]///6DC1D909call_WPP_SF_q@20;WPP_SF_q(x,x,x,x,x)//这个方法做一些ETW追踪///6DC1D90Ejmpshortloc_6DC1D8B8///[DllImport("dnsapi.dll",EntryPoint="DnsFlushResolverCacheEntry_W",CharSet=CharSet.Unicode)]publicstaticexternintDnsFlushResolverCacheEntry(stringhostName);联系右侧管理员删除。如需转载请注明出处:
