反病毒干扰C#应用程序的自动更新程序

时间:2015-03-04 05:59:30

标签: c# .net

我一直在尝试为我的.NET应用程序创建一个更新程序应用程序,当使用包含版本信息的文本文件检测到更新时,该应用程序会被调用。我创建了上述更新程序,但它有一些问题。下载文件时,反病毒软件似乎会破坏文件,无法打开。有时更新程序根本不运行并抛出异常(“基础连接已关闭:连接意外关闭。”)这似乎也是由本地防病毒软件引起的。我想也许我可以以二进制格式下载文件并在本地创建可执行文件,但我不完全确定我将如何做(或者如果它甚至可以工作)。我在很多领域仍然是一名初学者。所以我的问题是..如何在不触发反病毒的情况下有效下载应用程序的更新?

我的代码:

public Updater()
    {
        InitializeComponent();
        DownloadInfo.RemoteURI = "http://mywebserver.com/Application.exe";
        DownloadInfo.NewExecutableName = "update.exe";
        DownloadInfo.ExecutableName = "Application.exe";
        DownloadInfo.LocDest = AppDomain.CurrentDomain.BaseDirectory;
        InvokeUpdate();
    }

    private void InvokeUpdate()
    {
        Thread thr = new Thread(() => GetUpdate());
        thr.Start();
    }

    private void GetUpdate()
    {
        Process[] proc = Process.GetProcessesByName("Application");
        if (proc.Length != 0)
            proc[0].Kill();
        Util.DownloadFile(new Uri(DownloadInfo.RemoteURI), DownloadInfo.LocDest + DownloadInfo.NewExecutableName);
        if (File.Exists(DownloadInfo.LocDest + DownloadInfo.ExecutableName))
            File.Replace(DownloadInfo.LocDest + DownloadInfo.NewExecutableName, DownloadInfo.LocDest + DownloadInfo.ExecutableName, DownloadInfo.LocDest + "backup.exe");
        else
            File.Move(DownloadInfo.LocDest + DownloadInfo.NewExecutableName, DownloadInfo.LocDest + DownloadInfo.ExecutableName);
        try
        {
            File.Delete(DownloadInfo.LocDest + "backup.exe");
        }
        catch { }
        try
        {
            Process.Start(DownloadInfo.LocDest + DownloadInfo.ExecutableName);
        }
        catch { };
        Invoke((MethodInvoker)(() => this.Close()));
    }

来自我的util类的我的DownloadFile方法..

public static void DownloadFile(Uri remoteURI, string localDest)
    {
        try
        {
            using (WebClient webclient = new WebClient())
            {
                webclient.DownloadFile(remoteURI, localDest);
            }
        }
        catch { }
    }

0 个答案:

没有答案