亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

EyesBaby功能實現之軟件更新

2019-11-17 03:53:24
字體:
來源:轉載
供稿:網友


奉上CODE:

1.access操作類:

代碼
using System;
using System.Collections.Generic;
using System.Text;
using System.Data.OleDb;

namespace LogHelper.BLL
{
    /// <summary>
    /// 更新錯誤日志處理類
    /// </summary>
    public class Log
    {
        PRivate string _connStr;

        public Log(string connStr)
        {
            _connStr = connStr;
        }

        /// <summary>
        /// 添加一條日志
        /// </summary>
        /// <param name="title"></param>
        /// <param name="content"></param>
        /// <returns></returns>
        public bool Add(LogHelper.Model.Log modLog)
        {
            bool b = false;
            if (!string.IsNullOrEmpty(_connStr))
            {
                OleDbConnection objConnection = new OleDbConnection(_connStr);
                try
                {

                    objConnection.Open();
                    string insertSql = "insert into LogInfo(Title,Content,CreateDate) values('" + modLog.Title + "','" + modLog.Content + "','" + modLog.CreateDate + "')";
                    OleDbCommand cmd = new OleDbCommand(insertSql,objConnection);
                    cmd.ExecuteNonQuery();
                    b= true;
                }
                catch (Exception ex)
                { }
                finally
                {
                    objConnection.Close();
                }

            }
            return b;
        }
    }
}

namespace LogHelper.Model
{
    /// <summary>
    /// UpdateErrorLog模型
    /// </summary>
    public class Log
    {
        string _title;

        public string Title
        {
            get { return _title; }
            set { _title = value; }
        }
        string _content;

        public string Content
        {
            get { return _content; }
            set { _content = value; }
        }
        string _createDate;

        public string CreateDate
        {
            get { return _createDate; }
            set { _createDate = value; }
        }

    }
}





2.xml當前版本配置操作類:

代碼
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;

namespace EyesBaby
{
    /// <summary>
    /// 當前版本配置操作類
    /// </summary>
    public class CurrentVesionHelper
    {
        private const string _configName = "CurrentInfo.config";

        private const string _currentVesionKeyName = "currentVesion";

        private const string _updateDateKeyName = "updateDate";

        private const string _programNameKeyName = "programName";

        private const string _installDirKeyName = "installDir";

        XMLHandle xml = null;

        private string _currentVesion;

        private string _updateDate;

        private string _installDir;

        private string _programName;

        /// <summary>
        /// 安裝目錄
        /// </summary>
        public string InstallDir
        {
            get { return _installDir; }
            set { _installDir = value; }
        }

        /// <summary>
        /// 應用程序名稱
        /// </summary>
        public string ProgramName
        {
            get { return _programName; }
            set { _programName = value; }
        }

        /// <summary>
        /// 當前版本
        /// </summary>
        public string CurrentVesion
        {
            get { return _currentVesion; }
            set { _currentVesion = value; }
        }

        /// <summary>
        /// 更新日期
        /// </summary>
        public string UpdateDate
        {
            get { return _updateDate; }
            set { _updateDate = value; }
        }

        public CurrentVesionHelper()
        {
            if (!string.IsNullOrEmpty(_configName))
            {
                string filepath = application.StartupPath +"//"+ _configName;
                xml = new XMLHandle();
                xml.Load(filepath);
                _currentVesion = xml.GetValueByID(_currentVesionKeyName);
                _updateDate = xml.GetValueByID(_updateDateKeyName);
                _installDir = xml.GetValueByID(_installDirKeyName);
                _programName = xml.GetValueByID(_programNameKeyName);
            }
        }

        /// <summary>
        /// 更新保存
        /// </summary>
        public void UpdateVesion()
        {
            xml.SetValueByID(_currentVesionKeyName, _currentVesion);
            xml.SetValueByID(_updateDateKeyName, _updateDate);
            xml.SetValueByID(_installDirKeyName, _installDir);
            xml.SetValueByID(_programNameKeyName, _programName);
        }
    }
}





3.HttpWebRequest下載文件

代碼
using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.IO;

namespace EyesBaby
{
    /// <summary>
    /// 文件下載類
    /// </summary>
    public class DownloadClass
    {
        public string StrUrl;//文件下載網址
        public string StrFileName;//下載文件保存地址
        public string strError;//返回結果
        public long lStartPos = 0; //返回上次下載字節
        public long lCurrentPos = 0;//返回當前下載字節
        public long lDownloadFile;//返回當前下載文件長度

        public void DownloadFile()
        {
            System.IO.FileStream fs;
            if (System.IO.File.Exists(StrFileName))
            {
                fs = System.IO.File.OpenWrite(StrFileName);
                lStartPos = fs.Length;
                fs.Seek(lStartPos, System.IO.SeekOrigin.Current);
                //移動文件流中的當前指針
            }
            else
            {
                fs = new System.IO.FileStream(StrFileName, System.IO.FileMode.Create);
                lStartPos = 0;
            }

            //打開網絡連接
            try
            {
                System.Net.HttpWebRequest request = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(StrUrl);
                long length = request.GetResponse().ContentLength;
                lDownloadFile = length;
                if (lStartPos > 0)
                    request.AddRange((int)lStartPos); //設置Range值

                //向服務器請求,獲得服務器回應數據流
                System.IO.Stream ns = request.GetResponse().GetResponseStream();

                byte[] nbytes = new byte[512];
                int nReadSize = 0;
                nReadSize = ns.Read(nbytes, 0, 512);
                while (nReadSize > 0)
                {
                    fs.Write(nbytes, 0, nReadSize);
                    nReadSize = ns.Read(nbytes, 0, 512);
                    lCurrentPos = fs.Length;
                }

                fs.Close();
                ns.Close();
                strError = "下載完成";

            }
            catch (Exception ex)
            {
                fs.Close();
                strError = "下載過程中出現錯誤:" + ex.ToString();
            }

        }
    } 

}





4.GZipStream解壓縮文件包

代碼
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.IO.Compression;
using System.Windows.Forms;
using ICSharpCode.SharpZipLib.Zip;

namespace EyesBaby
{

    public class clsZip
    {
        public void CompressFile(string sourceFile, string destinationFile)
        {
            // make sure the source file is there
            if (File.Exists(sourceFile) == false)
                throw new FileNotFoundException();

            // Create the streams and byte arrays needed
            byte[] buffer = null;
            FileStream sourceStream = null;
            FileStream destinationStream = null;
            GZipStream compressedStream = null;

            try
            {
                // Read the bytes from the source file into a byte array
                sourceStream = new FileStream(sourceFile, FileMode.Open, FileAccess.Read, FileShare.Read);

                // Read the source stream values into the buffer
                buffer = new byte[sourceStream.Length];
                int checkCounter = sourceStream.Read(buffer, 0, buffer.Length);

                if (checkCounter != buffer.Length)
                {
                    throw new ApplicationException();
                }

                // Open the FileStream to write to
                destinationStream = new FileStream(destinationFile, FileMode.OpenOrCreate, FileAccess.Write);

                // Create a compression stream pointing to the destiantion stream
                compressedStream = new GZipStream(destinationStream, CompressionMode.Compress, true);

                // Now write the compressed data to the destination file
                compressedStream.Write(buffer, 0, buffer.Length);
            }
            catch (ApplicationException ex)
            {
                MessageBox.Show(ex.Message, "壓縮文件時發生錯誤:", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            finally
            {
                // Make sure we allways close all streams
                if (sourceStream != null)
                    sourceStream.Close();

                if (compressedStream != null)
                    compressedStream.Close();

                if (destinationStream != null)
                    destinationStream.Close();
            }
        }

        public void DecompressFile(string sourceFile, string destinationFile)
        {
            // make sure the source file is there
            if (File.Exists(sourceFile) == false)
                throw new FileNotFoundException();

            // Create the streams and byte arrays needed
            FileStream sourceStream = null;
            FileStream destinationStream = null;
            GZipStream decompressedStream = null;
            byte[] quartetBuffer = null;

            try
            {
                // Read in the compressed source stream
                sourceStream = new FileStream(sourceFile, FileMode.Open);

                // Create a compression stream pointing to the destiantion stream
                decompressedStream = new GZipStream(sourceStream, CompressionMode.Decompress, true);

                // Read the footer to determine the length of the destiantion file
                quartetBuffer = new byte[4];
                int position = (int)sourceStream.Length - 4;
                sourceStream.Position = position;
                sourceStream.Read(quartetBuffer, 0, 4);
                sourceStream.Position = 0;
                int checkLength = BitConverter.ToInt32(quartetBuffer, 0);

                byte[] buffer = new byte[checkLength + 100];

                int offset = 0;
                int total = 0;

                // Read the compressed data into the buffer
                while (true)
                {
                    int bytesRead = decompressedStream.Read(buffer, offset, 100);

                    if (bytesRead == 0)
                        break;

                    offset += bytesRead;
                    total += bytesRead;
                }

                // Now write everything to the destination file
                destinationStream = new FileStream(destinationFile, FileMode.Create);
                destinationStream.Write(buffer, 0, total);

                // and flush everyhting to clean out the buffer
                destinationStream.Flush();
            }
            catch (ApplicationException ex)
            {
                MessageBox.Show(ex.Message, "解壓文件時發生錯誤:", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            finally
            {
                // Make sure we allways close all streams
                if (sourceStream != null)
                    sourceStream.Close();

                if (decompressedStream != null)
                    decompressedStream.Close();

                if (destinationStream != null)
                    destinationStream.Close();
            }

        }

        /// <summary>
        /// 功能:解壓zip格式的文件。
        /// </summary>
        /// <param name="zipFilePath">壓縮文件路徑</param>
        /// <param name="unZipDir">解壓文件存放路徑,為空時默認與壓縮文件同一級目錄下,跟壓縮文件同名的文件夾</param>
        /// <param name="err">出錯信息</param>
        /// <returns>解壓是否成功</returns>
        public bool UnZipFile(string zipFilePath, string unZipDir, out string err)
        {
            err = "";
            if (zipFilePath == string.Empty)
            {
                err = "壓縮文件不能為空!";
                return false;
            }
            if (!File.Exists(zipFilePath))
            {
                err = "壓縮文件不存在!";
                return false;
            }
            //解壓文件夾為空時默認與壓縮文件同一級目錄下,跟壓縮文件同名的文件夾
            if (unZipDir == string.Empty)
                unZipDir = zipFilePath.Replace(Path.GetFileName(zipFilePath), Path.GetFileNameWithoutExtension(zipFilePath));
            if (!unZipDir.EndsWith("//"))
                unZipDir += "//";
            if (!Directory.Exists(unZipDir))
                Directory.CreateDirectory(unZipDir);

            try
            {
                using (ZipInputStream s = new ZipInputStream(File.OpenRead(zipFilePath)))
                {

                    ZipEntry theEntry;
                    while ((theEntry = s.GetNextEntry()) != null)
                    {
                        string directoryName = Path.GetDirectoryName(theEntry.Name);
                        string fileName = Path.GetFileName(theEntry.Name);
                        if (directoryName.Length > 0)
                        {
                            Directory.CreateDirectory(unZipDir + directoryName);
                        }
                        if (!directoryName.EndsWith("//"))
                            directoryName += "//";
                        if (fileName != String.Empty)
                        {
                            using (FileStream streamWriter = File.Create(unZipDir + theEntry.Name))
                            {

                                int size = 2048;
                                byte[] data = new byte[2048];
                                while (true)
                                {
                                    size = s.Read(data, 0, data.Length);
                                    if (size > 0)
                                    {
                                        streamWriter.Write(data, 0, size);
                                    }
                                    else
                                    {
                                        break;
                                    }
                                }
                            }
                        }
                    }//while
                }
            }
            catch (Exception ex)
            {
                err = ex.Message;
                return false;
            }
            return true;
        }//


    }


}





5.System.Diagnostics.Process操作進程



                 // 關閉程序
                    System.Diagnostics.Process[] ps = System.Diagnostics.Process.GetProcessesByName(programName);
                    foreach (System.Diagnostics.Process p in ps)
                    {
                        p.Kill();
                    }
           // 重啟程序
                    System.Diagnostics.Process.Start(startpath);


   
6.System.IO文件夾/文件復制



代碼
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;

namespace EyesBaby
{
    public class CopyFolder
    {
          private   static   int   total   =   0;  
          private   int   FileNumber   =   0;     //文件夾文件總數  
   
          ///   <summary>  
          ///   復制文件夾  
          ///   </summary>  
          ///   <param   name="sourceDirName">源文件夾</param>  
          ///   <param   name="destDirName">目標文件夾</param>  
          //復制文件夾  
        public void CopyDirectory(string sourceDirName, string destDirName)
        {
            if (!Directory.Exists(destDirName))
            {
                Directory.CreateDirectory(destDirName);
                File.SetAttributes(destDirName, File.GetAttributes(sourceDirName));
                //File.SetAttributes(destDirName,FileAttributes.Normal);  
            }

            if (destDirName[destDirName.Length - 1] != Path.DirectorySeparatorChar)
                destDirName = destDirName + Path.DirectorySeparatorChar;

            string[] files = Directory.GetFiles(sourceDirName);
            foreach (string file in files)
            {
                File.Copy(file, destDirName + Path.GetFileName(file), true);
                File.SetAttributes(destDirName + Path.GetFileName(file), FileAttributes.Normal);
                total++;
            }
            string[] dirs = Directory.GetDirectories(sourceDirName);
            foreach (string dir in dirs)
            {
                CopyDirectory(dir, destDirName + Path.GetFileName(dir));
            }
        }
     
        public   static   int   GetFilesCount(System.IO.DirectoryInfo   dirInfo)    
        {
              int   totalFile   =   0;    
              totalFile   +=   dirInfo.GetFiles().Length;    
              foreach   (System.IO.DirectoryInfo   subdir   in   dirInfo.GetDirectories())    
              {    
                  totalFile   +=   GetFilesCount(subdir);    
              }    
              return   totalFile;    
        }
    }
}





7.ProgressBar和BackgroundWorker顯示整個更新版本進度



代碼
        // 啟動執行
        bkgWorker.RunWorkerAsync();


        /// <summary>
        /// 設置加載時間值
        /// </summary>
        /// <param name="text"></param>
        /// <param name="value"></param>
        private void SetValue(string text, int value)
        {
            // 更新進度
            for (int i = 1; i <= value; i++)
            {
                bkgWorker.ReportProgress(1, text);
                System.Threading.Thread.Sleep(10);
            }
        }

        /// <summary>
        /// 執行工作
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            // 調用更新
            CallUpdate();
        }

        /// <summary>
        /// 操作進程
         /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            lblMsg.Text = e.UserState.ToString();
            prgUpdate.Value += e.ProgressPercentage;
        }

        /// <summary>
        /// 調用更新
         /// </summary>
        private void CallUpdate()
        {
            LogHelper.Model.Log modLog = new LogHelper.Model.Log();

            // 判斷是否有新版本
             AutoUpdate autoUpdate = new AutoUpdate();
            CurrentVesionHelper currentVesion = new CurrentVesionHelper();

            string updatexmlpath = System.Configuration.ConfigurationSettings.AppSettings["updateXmlPath"];
            UpdateXmlHelper updateXml = new UpdateXmlHelper(updatexmlpath);
            string oldVesion = currentVesion.CurrentVesion;
            string newVesion = updateXml.Vesion;
            string newDownURL = updateXml.DownURL;
            bool b = autoUpdate.IsNewVesion(newVesion, oldVesion);
            
            if (b)
            {                
                string filename = newDownURL.Substring(newDownURL.LastIndexOf('/') + 1);
                string savePath = Application.StartupPath + "/update/" + filename;
                SetValue("正在下載新版本……", 10);
                if (autoUpdate.DownNewEdition(newDownURL, savePath))
                {
                    string installDir = currentVesion.InstallDir = Application.StartupPath;
                    string programName = currentVesion.ProgramName;
                   
                    string error = string.Empty;
                    string zipfilepath = savePath;
                    string unzipdir = Application.StartupPath + "//update//" + DateTime.Now.ToString("yyyy-MM-dd") + "//";
                    SetValue("正在解壓文件包……", 20);
                    // 解壓文件包
                      clsZip zip = new clsZip();
                    zip.UnZipFile(zipfilepath, unzipdir, out error);
                    SetValue("正在關閉程序……", 10);
                    // 關閉程序
                      System.Diagnostics.Process[] ps = System.Diagnostics.Process.GetProcessesByName(programName);
                    foreach (System.Diagnostics.Process p in ps)
                    {
                        p.Kill();
                    }
                    SetValue("正在覆蓋原安裝程序……", 20);
                    #region 覆蓋原安裝程序
                       // 休息1秒
                       System.Threading.Thread.Sleep(1000);
                    string installPath = installDir + "//" + programName;
                    //if (System.IO.Directory.Exists(installPath))
                    //{
                    //    // 先刪除原安裝路徑
                       //    System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo(installPath);
                    //     dir.Delete(true);
                    //    //System.IO.Directory.Delete(installPath, true);
                    //}
                    //// 休息3秒
                       //System.Threading.Thread.Sleep(5000);
                    // 再將新版本復制到原安裝目錄
                       CopyFolder copy = new CopyFolder();
                    copy.CopyDirectory(unzipdir, installDir);
                    //System.IO.Directory.Move(unzipdir, installDir);

                    #endregion
                    string exepath = "EyesBaby.exe";
                    // 休息3秒
                       System.Threading.Thread.Sleep(3000);
                    string startpath = installPath + "//" + exepath;
                    SetValue("記錄新版本……", 20);

                    // 記錄新版本到CurrentInfo.config
                    currentVesion.CurrentVesion = newVesion;
                    currentVesion.UpdateDate = DateTime.Now.ToShortDateString();
                    currentVesion.UpdateVesion();

                    modLog.Content = "更新成功--新版本號:" + newVesion;
                    //MessageBox.Show("更新成功!");
                    SetValue("重啟程序……", 20);
                    // 重啟程序
                      System.Diagnostics.Process.Start(startpath);

                }
                else
                {
                    modLog.Content = "下載最新版本失敗";
                    MessageBox.Show("下載最新版本失敗!");
                }
            }
            else
                modLog.Content = "沒有發現新版本";
            modLog.Title = "調用更新服務";
            modLog.CreateDate = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss");
            bllLog.Add(modLog);
        }





部分代碼也是從網上東拼西湊找出來的,現已丟失源文路徑。深感抱歉!



我的第一款實用工具-眼保程序(EyesBaby)

EyesBaby1.0使用幫助文檔


EyesBaby功能實現之窗口拖拽與縮放功能

EyesBaby功能實現之圖片控件上添加字符

EyesBaby功能實現之Windows前景色調節器



下載地址:http://files.VEVb.com/yizhuqing/EyesBabySetup10.zip



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
1769国产精品| 国产精品视频播放| 国产精品久久久久免费a∨| 92看片淫黄大片看国产片| 美女黄色丝袜一区| 538国产精品一区二区在线| 亚洲free性xxxx护士白浆| 成人啪啪免费看| 成人免费在线视频网址| 国产日韩换脸av一区在线观看| 欧美在线视频免费观看| 国产精品久久久久不卡| 国产精品中文字幕久久久| 亚洲女同精品视频| 欧美性猛交丰臀xxxxx网站| 日韩一区二区福利| 高清在线视频日韩欧美| 日本中文字幕不卡免费| 亚洲欧美日韩精品久久| 午夜伦理精品一区| 国产在线视频2019最新视频| 亚洲欧美日韩高清| 精品无人区乱码1区2区3区在线| 久久久久久久久久久网站| 国产精品劲爆视频| 97超碰国产精品女人人人爽| 欧美性猛交99久久久久99按摩| 亚洲精品欧美一区二区三区| 精品免费在线观看| 亚洲国产精品推荐| 欧美激情精品久久久久久变态| 国产在线播放不卡| 伊人久久久久久久久久久久久| 国产精品电影网站| 亚洲午夜国产成人av电影男同| 久久精品99国产精品酒店日本| 久久精品国产综合| 92看片淫黄大片欧美看国产片| 国产国语videosex另类| 国产精品一二区| 亚洲欧美激情四射在线日| 亚洲成人精品久久久| 国产精品免费福利| 亚洲男人的天堂在线播放| 成人网在线免费看| 91久久国产婷婷一区二区| 日韩欧美一区二区三区| 亚洲国产女人aaa毛片在线| 亚洲视频电影图片偷拍一区| 欧美午夜xxx| 欧美午夜性色大片在线观看| xx视频.9999.com| 中文字幕国内精品| 美女精品视频一区| 欧洲亚洲在线视频| 欧美精品xxx| 欧美视频精品一区| 欧美大片网站在线观看| 77777少妇光屁股久久一区| 亚洲成人久久久久| 色噜噜狠狠色综合网图区| 久久亚洲欧美日韩精品专区| 国产热re99久久6国产精品| 91成人天堂久久成人| 国产一区二区三区在线观看视频| 日韩视频在线观看免费| 国产一区二区三区高清在线观看| 国产欧美日韩免费看aⅴ视频| 在线色欧美三级视频| 在线激情影院一区| 成人久久久久爱| 2021国产精品视频| 欧美成人黑人xx视频免费观看| 亚洲免费高清视频| 国产精品久久久久久影视| 欧美在线激情视频| 日本一区二区三区在线播放| 亚洲色在线视频| 国模私拍一区二区三区| 黄色成人av网| 国产精品一二区| 欧美激情一级精品国产| 亚洲精品www久久久| 亚洲成人av在线| 91av福利视频| 97视频网站入口| 日韩av在线播放资源| 久久夜精品va视频免费观看| 米奇精品一区二区三区在线观看| 尤物yw午夜国产精品视频| 97视频色精品| 亚洲a一级视频| 国产一区二区三区在线| 亚洲欧美日韩一区在线| 亚洲欧美日韩天堂一区二区| 欧美性生交xxxxx久久久| 北条麻妃一区二区在线观看| 一区二区三区天堂av| 91人人爽人人爽人人精88v| 亚洲国产成人91精品| 亚洲人成在线观| 精品视频偷偷看在线观看| 欧美激情第一页xxx| 国产精品丝袜一区二区三区| 91精品视频观看| 国产精品露脸av在线| 久久久人成影片一区二区三区观看| 亚洲人精选亚洲人成在线| 国产一区二区三区在线观看网站| 狠狠色狠色综合曰曰| 国产精品爽黄69| 久久这里有精品视频| 精品亚洲一区二区三区| 伊人久久大香线蕉av一区二区| 中文国产成人精品久久一| 亚洲电影免费在线观看| 懂色av中文一区二区三区天美| 国产精品久久99久久| 91免费人成网站在线观看18| 91高清免费视频| 欧美在线观看网址综合| www日韩中文字幕在线看| 亚洲国产精品va| 国产日本欧美在线观看| 亚洲视频第一页| 国产精品久久久久一区二区| 欧美一区亚洲一区| 4k岛国日韩精品**专区| 亚洲色图15p| 日韩欧美在线中文字幕| 中文字幕日韩高清| 在线播放国产一区二区三区| 色婷婷av一区二区三区久久| 亚洲成人精品久久久| 日韩电影中文字幕一区| 国产婷婷成人久久av免费高清| 日韩欧美在线看| 午夜精品久久久久久99热| 国内精品伊人久久| 亚洲精品乱码久久久久久金桔影视| 久久久国产精彩视频美女艺术照福利| 一区二区欧美亚洲| 日韩精品视频观看| 欧美性色19p| 亚洲老头老太hd| 伊人久久久久久久久久久久久| 欧美日韩另类视频| 91精品免费视频| 另类图片亚洲另类| 久久久精品视频在线观看| 中文字幕免费国产精品| 久久九九免费视频| 欧美在线视频免费观看| 亚洲欧美精品一区| 亚洲欧美第一页| 亚洲欧美制服中文字幕| 国产经典一区二区| 久久99精品久久久久久噜噜| 国产欧美日韩精品丝袜高跟鞋| 欧美性做爰毛片| 久久99亚洲精品| 国产视频在线观看一区二区| 欧美裸身视频免费观看| 国产精品99久久久久久白浆小说|