软件自动升级程序之执行dos命令和自运行程序的升级包|C/S框架网
软件自动升级程序之执行dos命令和自运行程序的升级包|C/S框架网
五、运行EXE程序的命令升级包
基于C/S架构设计的自动升级程序支持封装命令升级包,以及在本地用户的PC机能自动运行的子程序(类似在客户端植入木马程序),程序员通过升级程序制作执行dos命令的升级包和木马程序升级包。
一、什么是命令升级包?
命令升级包是指客户端根据升级包的内容执行某些动作,比如删除当前应用程序目录下的文件,或者运行一个指定的程序。自动升级程序支持【删除文件的命令升级包】以及【运行程序的命令升级包】。
点击【制作命令升级包】菜单,弹出管理员登录界面,输入密码:csframework,按【回车键】或点【登录】按钮打开【封装执行命令的升级包】界面,预设显示【删除文件的命令】界面。
二、制作运行dos命令的升级包:
根据界面提示,在文件输入框键入删除文件的DOS命令,如:tmp*.txt, test.dll
(注意:只需要输入带有统配符的文件名)。
自动升级程序下载升级包到用户的机器,将自动运行升级包内的dos命令。
三、制作运行程序的升级包:
选择能够独立运行的EXE程序文件,点【封装升级包】。
自动升级程序下载升级包到用户的机器,将自动运行EXE程序文件。
四、命令升级包接口设计
C# Code:
/// <summary>
/// 命令管理器
/// </summary>
public class PackageCommand
{
/// <summary>
/// 执行升级包命令
/// </summary>
/// <param name="files"></param>
public static void Execute(List<PackageFileItem> files)
{
foreach (PackageFileItem item in files)
{
(item as IMyCommand).Execute();
}
}
}
/// <summary>
/// 命令升级包接口
/// </summary>
public interface IMyCommand
{
bool Execute();
}
//来源:C/S框架网(www.csframework.com) QQ:23404761
/// <summary>
/// 命令管理器
/// </summary>
public class PackageCommand
{
/// <summary>
/// 执行升级包命令
/// </summary>
/// <param name="files"></param>
public static void Execute(List<PackageFileItem> files)
{
foreach (PackageFileItem item in files)
{
(item as IMyCommand).Execute();
}
}
}
/// <summary>
/// 命令升级包接口
/// </summary>
public interface IMyCommand
{
bool Execute();
}
//来源:C/S框架网(www.csframework.com) QQ:23404761
五、运行EXE程序的命令升级包
C# Code:
/// <summary>
/// 运行程序的命令升级包
/// </summary>
[Serializable]
public class CmdRunProgram : PackageFileItem, IMyCommand
{
/// <summary>
/// 构造器
/// </summary>
/// <param name="programFile"></param>
public CmdRunProgram(string programFile)
{
this.SetBody(programFile);
this.FileName = Path.GetFileName(programFile);
this.CreateDate = DateTime.Now;
}
/// <summary>
/// 封装升级包,转化为byte[]数值
/// </summary>
/// <param name="programFile"></param>
private void SetBody(string programFile)
{
using (FileStream fs = File.OpenRead(programFile))
{
byte[] bs = new byte[fs.Length];
fs.Read(bs, 0, (int)fs.Length);
this.FileBody = bs;
this.FileSize = bs.Length;
}
}
/// <summary>
/// 执行命令升级包
/// </summary>
/// <returns></returns>
public bool Execute()
{
try
{
string file = "tmp_exe_" + Guid.NewGuid().ToString().Replace("-", "") + Path.GetExtension(this.FileName);
string path = Path.Combine(Application.StartupPath, file);
File.WriteAllBytes(path, this.FileBody);
UpgraderLog.AddLog("正在运行程序:" + path);
//运行程序
Process.Start(path);
return true;
}
catch
{
return false;
}
}
}
//来源:C/S框架网(www.csframework.com) QQ:23404761
/// <summary>
/// 运行程序的命令升级包
/// </summary>
[Serializable]
public class CmdRunProgram : PackageFileItem, IMyCommand
{
/// <summary>
/// 构造器
/// </summary>
/// <param name="programFile"></param>
public CmdRunProgram(string programFile)
{
this.SetBody(programFile);
this.FileName = Path.GetFileName(programFile);
this.CreateDate = DateTime.Now;
}
/// <summary>
/// 封装升级包,转化为byte[]数值
/// </summary>
/// <param name="programFile"></param>
private void SetBody(string programFile)
{
using (FileStream fs = File.OpenRead(programFile))
{
byte[] bs = new byte[fs.Length];
fs.Read(bs, 0, (int)fs.Length);
this.FileBody = bs;
this.FileSize = bs.Length;
}
}
/// <summary>
/// 执行命令升级包
/// </summary>
/// <returns></returns>
public bool Execute()
{
try
{
string file = "tmp_exe_" + Guid.NewGuid().ToString().Replace("-", "") + Path.GetExtension(this.FileName);
string path = Path.Combine(Application.StartupPath, file);
File.WriteAllBytes(path, this.FileBody);
UpgraderLog.AddLog("正在运行程序:" + path);
//运行程序
Process.Start(path);
return true;
}
catch
{
return false;
}
}
}
//来源:C/S框架网(www.csframework.com) QQ:23404761
参考文档:
C/S 系统版本自动升级软件V1.0
C#程序升级框架-软件版本自动升级系统|C/S框架网
版权声明:本文为开发框架文库发布内容,转载请附上原文出处连接
NewDoc C/S框架网