UpdateSvc.cs 5.1 KB
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Web;
using System.Web.Services;
using System.EnterpriseServices;
using System.Reflection;
using System.IO;
using Comm;
using System.Windows.Forms;
/// <summary>
/// UpdateSvc 的摘要说明


/// </summary>
[Transaction(TransactionOption.Required)]
[WebServiceAttribute(Namespace = BaseSvc.strNameSpace)]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class UpdateSvc : BaseSvc
{
    public UpdateSvc()
    {
        //CODEGEN:该调用是 ASP.NET Web 服务设计器所必需的


        InitializeComponent();
    }

    #region Component Designer generated code

    //Web 服务设计器所必需的


    private IContainer components = null;

    /// <summary>
    /// 设计器支持所需的方法 - 不要使用代码编辑器修改


    /// 此方法的内容。


    /// </summary>
    private void InitializeComponent()
    {
    }

    /// <summary>
    /// 清理所有正在使用的资源。


    /// </summary>
    protected override void Dispose(bool disposing)
    {
        if (disposing && components != null)
        {
            components.Dispose();
        }
        base.Dispose(disposing);
    }

    #endregion

    [WebMethod(Description = "获得最新客户端的版本信息", EnableSession = true, TransactionOption = TransactionOption.RequiresNew)]
    public string GetClientVersion()
    {
        string strVer = "";
        try
        {
            string strClientPath = Configuration.ClientPath;
            if (!strClientPath.EndsWith(@"\"))	//若路径不是以\结尾,则追加之

                strClientPath += @"\";
            strClientPath += "App.exe";
            Assembly Asm = Assembly.LoadFrom(strClientPath);
            AssemblyName AsmName = Asm.GetName();
            //this._LocalMainVersion = AsmName.Version.ToString();
            //this._LocalMainCulture = AsmName.CultureInfo.ToString();
            //this._LocalMainPublicKey = Convert.ToString(AsmName.GetPublicKeyToken());
            strVer = AsmName.Version.ToString();
        }
        catch (Exception e)
        {
            throw e;
        }
        return strVer;
    }

    [WebMethod(Description = "获得最新客户端的升级文件列表", EnableSession = true, TransactionOption = TransactionOption.RequiresNew)]
    public DataSet GetClientFileList()
    {
        return ReadClientFileList();
    }

    [WebMethod(Description = "获得最新客户端的升级文件", EnableSession = true, TransactionOption = TransactionOption.RequiresNew)]
    public byte[] GetClientFile(string FileName)
    {
        return ReadClientFile(FileName);
    }

    [WebMethod(Description = "获得自动升级开关值", EnableSession = true, TransactionOption = TransactionOption.RequiresNew)]
    public string GetUpdateSwitch()
    {
        string f_UpdateSwitch = Configuration.MyCMMIUpdateSwitch;
        return f_UpdateSwitch;
    }
    private DataSet ReadClientFileList()
    {
        string strClientPath;
        DataSet UpdateFileInfo = new DataSet("UpdateFileInfo");
        try
        {
            strClientPath = Configuration.ClientPath;
        }
        catch
        {
            return UpdateFileInfo;
        }
        DataTable UpdateFileTab = UpdateFileInfo.Tables.Add("UpdateFileTab");
        UpdateFileTab.Columns.Add("FileName", typeof(string));
        UpdateFileTab.Columns.Add("FileLength", typeof(string));
        UpdateFileTab.Columns.Add("FileDateTime", typeof(string));

        //todo modify by colbert liveupdate multiple Directories Files
        string[] FilePaths = Directory.GetFiles(strClientPath, "*.*", SearchOption.AllDirectories);
        for (int i = 0; i < FilePaths.Length; i++)
        {
            FileInfo fileinfo = new FileInfo(FilePaths[i]);
            DataRow UpdateFileRow = UpdateFileTab.NewRow();
            UpdateFileRow["FileName"] = fileinfo.FullName.Replace(strClientPath, "");
            UpdateFileRow["FileLength"] = fileinfo.Length.ToString();
            UpdateFileRow["FileDateTime"] = fileinfo.LastWriteTime.ToString();

            UpdateFileTab.Rows.Add(UpdateFileRow);
        }
        return UpdateFileInfo;
    }

    private byte[] ReadClientFile(string FileName)
    {
        byte[] mbyte;
        FileStream fstr;
        try
        {
            string strClientPath = Configuration.ClientPath;
        }
        catch
        {
            return mbyte = new byte[0];
        }
        string FileFullName = Configuration.ClientPath;
        if (!FileFullName.EndsWith(@"\"))	//若路径不是以\结尾,则追加之

            FileFullName += @"\";
        FileFullName = FileFullName + FileName;
        try
        {
            fstr = new FileStream(FileFullName, FileMode.OpenOrCreate, FileAccess.Read, FileShare.Read);
        }
        catch
        {
            return mbyte = new byte[0];
        }
        mbyte = new byte[fstr.Length];
        int mbyteLength = mbyte.Length;
        int m = 0;
        do
        {
            m = fstr.Read(mbyte, 0, mbyteLength);
        }
        while (m > 0);
        fstr.Close();
        return mbyte;
    }
}