C#利用批处理实现正在运行的程序自动更新
2009-02-26 08:18:39 来源:WEB开发网参数 /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);
}
更多精彩
赞助商链接