c# 清除IE缓存

from:
c# 清除IE缓存
2009-10-31 22:11
#region private void ClearIECache() // 清除IE缓存
        // --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
        /// <summary>
        /// 清除IE缓存
        /// </summary>
        private void ClearIECache()
        {
            Process process = new Process();
            process.StartInfo.FileName = "cmd.exe";
            process.StartInfo.Arguments = "/c " + "del /f /s /q /"%userprofile%//Local Settings//Temporary Internet Files//*.*/"";
            process.StartInfo.UseShellExecute = false;
            process.StartInfo.RedirectStandardInput = true;
            process.StartInfo.RedirectStandardOutput = true;
            process.StartInfo.RedirectStandardError = true;
            process.StartInfo.CreateNoWindow = true;
            process.Start();
            string result = process.StandardOutput.ReadToEnd();
        }
        // --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
        #endregion

        #region private void ClearIECookie() // 清除IE Cookie
        // --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
        /// <summary>
        /// 清除IE Cookie
        /// </summary>
        private void ClearIECookie()
        {
            Process process = new Process();
            process.StartInfo.FileName = "cmd.exe";
            process.StartInfo.Arguments = "/c " + "del /f /s /q /"%userprofile%//Cookies//*.*/"";
            process.StartInfo.UseShellExecute = false;
            process.StartInfo.RedirectStandardInput = true;
            process.StartInfo.RedirectStandardOutput = true;
            process.StartInfo.RedirectStandardError = true;
            process.StartInfo.CreateNoWindow = true;
            process.Start();
            string result = process.StandardOutput.ReadToEnd();
        }
        // --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
        #endregion

        #region private void KillIEWindows() // 关闭IE窗口
        // --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
        /// <summary>
        /// 关闭IE窗口
        /// </summary>
        private void KillIEWindows()
        {
            Process[] process = Process.GetProcesses();
            for (int i = 0; i < process.Length; i++)
            {
                if (process[i].ProcessName.ToLower() == "iexplore")
                {
                    try
                    {
                        process[i].Kill();
                        Thread.Sleep(500);
                    }
                    catch
                    {
                    }
                }
            }
        }
        // --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
        #endregion

 

 

 

 

 

 

 


 

 

 

 

第二种方法:

 

 

 

     class DeleteCache

    {

        // For PInvoke: Contains information about an entry in the Internet cache

        [StructLayout(LayoutKind.Explicit, Size=80)]

        public struct INTERNET_CACHE_ENTRY_INFOA

        {

            [FieldOffset(0)]  public uint dwStructSize;

            [FieldOffset(4)]  public IntPtr lpszSourceUrlName;

            [FieldOffset(8)]  public IntPtr lpszLocalFileName;

            [FieldOffset(12)] public uint CacheEntryType;

            [FieldOffset(16)] public uint dwUseCount;

            [FieldOffset(20)] public uint dwHitRate;

            [FieldOffset(24)] public uint dwSizeLow;

            [FieldOffset(28)] public uint dwSizeHigh;

            [FieldOffset(32)] public FILETIME LastModifiedTime;

            [FieldOffset(40)] public FILETIME ExpireTime;

            [FieldOffset(48)] public FILETIME LastAccessTime;

            [FieldOffset(56)] public FILETIME LastSyncTime;

            [FieldOffset(64)] public IntPtr lpHeaderInfo;

            [FieldOffset(68)] public uint dwHeaderInfoSize;

            [FieldOffset(72)] public IntPtr lpszFileExtension;

            [FieldOffset(76)] public uint dwReserved;

            [FieldOffset(76)] public uint dwExemptDelta;

        }

 

        // For PInvoke: Initiates the enumeration of the cache groups in the Internet cache

        [DllImport(@"wininet",

            SetLastError=true,

            CharSet=CharSet.Auto,

            EntryPoint="FindFirstUrlCacheGroup",

            CallingConvention=CallingConvention.StdCall)]

        public static extern IntPtr FindFirstUrlCacheGroup(

            int dwFlags,

            int dwFilter,

            IntPtr lpSearchCondition,

            int dwSearchCondition,

            ref long lpGroupId,

            IntPtr lpReserved);

 

        // For PInvoke: Retrieves the next cache group in a cache group enumeration

        [DllImport(@"wininet",

            SetLastError=true,

            CharSet=CharSet.Auto,

            EntryPoint="FindNextUrlCacheGroup",

            CallingConvention=CallingConvention.StdCall)]

        public static extern bool FindNextUrlCacheGroup(

            IntPtr hFind,

            ref long lpGroupId,

            IntPtr lpReserved);

 

        // For PInvoke: Releases the specified GROUPID and any associated state in the cache index file

        [DllImport(@"wininet", 

            SetLastError=true, 

            CharSet=CharSet.Auto, 

            EntryPoint="DeleteUrlCacheGroup", 

            CallingConvention=CallingConvention.StdCall)]

        public static extern bool DeleteUrlCacheGroup(

            long GroupId,

            int dwFlags,

            IntPtr lpReserved);

 

        // For PInvoke: Begins the enumeration of the Internet cache

        [DllImport(@"wininet",

            SetLastError=true,

            CharSet=CharSet.Auto,

            EntryPoint="FindFirstUrlCacheEntryA",

            CallingConvention=CallingConvention.StdCall)]

        public static extern IntPtr FindFirstUrlCacheEntry(

            [MarshalAs(UnmanagedType.LPTStr)] string lpszUrlSearchPattern,

            IntPtr lpFirstCacheEntryInfo,

            ref int lpdwFirstCacheEntryInfoBufferSize);

 

        // For PInvoke: Retrieves the next entry in the Internet cache

        [DllImport(@"wininet",

            SetLastError=true,

            CharSet=CharSet.Auto,

            EntryPoint="FindNextUrlCacheEntryA",

            CallingConvention=CallingConvention.StdCall)]

        public static extern bool FindNextUrlCacheEntry(

            IntPtr hFind,

            IntPtr lpNextCacheEntryInfo,

            ref int lpdwNextCacheEntryInfoBufferSize);

 

        // For PInvoke: Removes the file that is associated with the source name from the cache, if the file exists

        [DllImport(@"wininet",

            SetLastError=true,

            CharSet=CharSet.Auto,

            EntryPoint="DeleteUrlCacheEntryA",

            CallingConvention=CallingConvention.StdCall)]

        public static extern bool DeleteUrlCacheEntry(

            IntPtr lpszUrlName);

 

        [STAThread]

        static void Main(string[] args)

        {

            // Indicates that all of the cache groups in the user's system should be enumerated

            const int CACHEGROUP_SEARCH_ALL = 0x0;

            // Indicates that all the cache entries that are associated with the cache group

            // should be deleted, unless the entry belongs to another cache group.

            const int CACHEGROUP_FLAG_FLUSHURL_ONDELETE = 0x2;

            // File not found.

            const int ERROR_FILE_NOT_FOUND = 0x2;

            // No more items have been found.

            const int ERROR_NO_MORE_ITEMS = 259;

            // Pointer to a GROUPID variable

            long groupId = 0;

 

            // Local variables

            int cacheEntryInfoBufferSizeInitial = 0;

            int cacheEntryInfoBufferSize = 0;

            IntPtr cacheEntryInfoBuffer = IntPtr.Zero;

            INTERNET_CACHE_ENTRY_INFOA internetCacheEntry;

            IntPtr enumHandle = IntPtr.Zero;

            bool returnValue = false;

 

            // Delete the groups first.

            // Groups may not always exist on the system.

            // For more information, visit the following Microsoft Web site:

            // http://msdn.microsoft.com/library/?url=/workshop/networking/wininet/overview/cache.asp

            // By default, a URL does not belong to any group. Therefore, that cache may become

            // empty even when the CacheGroup APIs are not used because the existing URL does not belong to any group.

            enumHandle = FindFirstUrlCacheGroup(0, CACHEGROUP_SEARCH_ALL, IntPtr.Zero, 0, ref groupId, IntPtr.Zero);

            // If there are no items in the Cache, you are finished.

            if (enumHandle != IntPtr.Zero && ERROR_NO_MORE_ITEMS == Marshal.GetLastWin32Error())

                return;

 

            // Loop through Cache Group, and then delete entries.

            while(true)

            {

                // Delete a particular Cache Group.

                returnValue = DeleteUrlCacheGroup(groupId, CACHEGROUP_FLAG_FLUSHURL_ONDELETE, IntPtr.Zero);

                if (!returnValue && ERROR_FILE_NOT_FOUND == Marshal.GetLastWin32Error())

                {

                    returnValue = FindNextUrlCacheGroup(enumHandle, ref groupId, IntPtr.Zero);

                }

 

                if (!returnValue && (ERROR_NO_MORE_ITEMS == Marshal.GetLastWin32Error() || ERROR_FILE_NOT_FOUND == Marshal.GetLastWin32Error()))

                    break;

            }

 

            // Start to delete URLs that do not belong to any group.

            enumHandle = FindFirstUrlCacheEntry(null, IntPtr.Zero, ref cacheEntryInfoBufferSizeInitial);

            if (enumHandle == IntPtr.Zero && ERROR_NO_MORE_ITEMS == Marshal.GetLastWin32Error())

                return;

 

            cacheEntryInfoBufferSize = cacheEntryInfoBufferSizeInitial;

            cacheEntryInfoBuffer = Marshal.AllocHGlobal(cacheEntryInfoBufferSize);

            enumHandle = FindFirstUrlCacheEntry(null, cacheEntryInfoBuffer, ref cacheEntryInfoBufferSizeInitial);

 

            while(true)

            {

                internetCacheEntry = (INTERNET_CACHE_ENTRY_INFOA)Marshal.PtrToStructure(cacheEntryInfoBuffer, typeof(INTERNET_CACHE_ENTRY_INFOA));

 

                cacheEntryInfoBufferSizeInitial = cacheEntryInfoBufferSize;

                returnValue = DeleteUrlCacheEntry(internetCacheEntry.lpszSourceUrlName);

                if (!returnValue)

                {

                    returnValue = FindNextUrlCacheEntry(enumHandle, cacheEntryInfoBuffer, ref cacheEntryInfoBufferSizeInitial);

                }

                if (!returnValue && ERROR_NO_MORE_ITEMS == Marshal.GetLastWin32Error())

                {

                    break;

                }

                if (!returnValue && cacheEntryInfoBufferSizeInitial > cacheEntryInfoBufferSize)

                {

                    cacheEntryInfoBufferSize = cacheEntryInfoBufferSizeInitial;

                    cacheEntryInfoBuffer = Marshal.ReAllocHGlobal(cacheEntryInfoBuffer, (IntPtr) cacheEntryInfoBufferSize);

                    returnValue = FindNextUrlCacheEntry(enumHandle, cacheEntryInfoBuffer, ref cacheEntryInfoBufferSizeInitial);

                }

            }

            Marshal.FreeHGlobal(cacheEntryInfoBuffer);

        }

    }

 

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值