WEB开发网
开发学院软件开发C语言 C#利用批处理实现正在运行的程序自动更新 阅读

C#利用批处理实现正在运行的程序自动更新

 2009-02-26 08:18:39 来源:WEB开发网   
核心提示: 参数 /Y 可以在 COPYCMD 环境变数中预先设定.但可以在命令列中用 /-Y 参数来覆盖原有设定.对哦,xcopy是可以复制更深层次的目录和文件的,那我如果建一个bat文件,执行的是复制功能,然后再用一个bat来调用他,并且用一个bat文件去杀掉某一个文件,然后再复制新的,再启动是没

参数 /Y 可以在 COPYCMD 环境变数中预先设定.但可以在命令列中用 /-Y 参数

来覆盖原有设定.

对哦,xcopy是可以复制更深层次的目录和文件的,那我如果建一个bat文件,执行的是复制功能,然后再用一个bat来调用他,并且用一个bat文件去杀掉某一个文件,然后再复制新的,再启动是没有什么问题的吧.试试:

首先,下载园子里jenry的那篇自动更新的源码(http://www.cnblogs.com/jenry/archive/2006/08/15/477302.html);

因为我觉得他这篇自动更新的文章写的简单但实用,再加上有网友在他的基础上添加了一个aulwriter工具,所以自动更新直接用这个也蛮方便的.

第二步,我添加了一个方法KillSelfThenRun()用于删除正在运行的主Exe,然后再重启新的主Exe。代码全部粘贴如下:

KillSelfThenRun
        private void KillSelfThenRun()
        {
            string strXCopyFiles = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "XCopyFiles.bat");
            using (StreamWriter swXcopy = File.CreateText(strXCopyFiles))
            {
                string strOriginalPath = tempUpdatePath.Substring(0, tempUpdatePath.Length - 1);
                swXcopy.WriteLine(string.Format(@"
                                                @echo off
                                                xcopy /y/s/e/v " + strOriginalPath + " " + Directory.GetCurrentDirectory() +"", AppDomain.CurrentDomain.FriendlyName));
            }
            string filename = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "killmyself.bat");
            using (StreamWriter bat = File.CreateText(filename))
            {
                // 自删除,自啟動
                bat.WriteLine(string.Format(@"
                        @echo off
                        :selfkill
                        attrib -a -r -s -h ""{0}""
                        del ""{0}""
                        if exist ""{0}"" goto selfkill
                        call XCopyFiles.bat
                        del XCopyFiles.bat
                        del /f/q " + tempUpdatePath+Environment.NewLine + " rd " + tempUpdatePath +Environment.NewLine + " start " + mainAppExe +Environment.NewLine + " del %0 ", AppDomain.CurrentDomain.FriendlyName));
            }

            // 启动自删除批处理文件
            ProcessStartInfo info = new ProcessStartInfo(filename);
            info.WindowStyle = ProcessWindowStyle.Hidden;
            Process.Start(info);

            // 强制关闭当前进程
            Environment.Exit(0);
        }

Tags:利用 批处理 实现

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接