社区
C#
帖子详情
求!C# 程序能自动更新,升级的代码
20004
2011-01-09 08:22:47
代码!100分!
...全文
368
9
打赏
收藏
求!C# 程序能自动更新,升级的代码
代码!100分!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
epngllh
2011-01-10
打赏
举报
回复
http://lovefly.blog.51cto.com/914912/273217
这篇文章可以参考一下。不是我写的。
hhc123
2011-01-10
打赏
举报
回复
这个还用问啊,到精华帖里面找。
顺手找给你算了
http://topic.csdn.net/u/20090422/08/69f9713b-3982-4313-ab11-7fb6eefdcf93.html?77976
jhdxhj
2011-01-10
打赏
举报
回复
最简单的是用 clickonce 部署代码。
wy811007
2011-01-10
打赏
举报
回复
3L好牛。 不过 这个自动更新要弄个小空间好像。。
kingcsx666
2011-01-09
打赏
举报
回复
inso2010
2011-01-09
打赏
举报
回复
1)原程序启动后检查版本号。如果不是最新的提示更新
2)若更新程序,另起一个进程,进行文件的下载
3)下载完成后提示,要求用户关闭当前程序,然后更新程序自动将文件复制到指定目录(或者替换原有文件)。
4)替换完成后提示更新成功,启动原程序。新进程退出
可采用Socket通信方式和.net框架的FtpWebRequest类来实现与FTP服务器通信和文件的下载,其中采用FtpWebRequest下载文件的部分代码如下,两种方式百度上都有代码,其中FtpWebRequest的客户端FTP类如下,其他的可以按着上面的步骤自己写
class FTP_Class
{
string ftpServerIP;
string ftpUserID;
string ftpPassword;
FtpWebRequest reqFTP;
public void Connecttest(string ftpServerIP, string ftpUserID, string ftpPassword)
{
// 根据uri创建FtpWebRequest对象
reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP));
// 指定数据传输类型
reqFTP.UseBinary = true;
// ftp用户名和密码
reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
}
#region 连接
/// <summary>
/// 连接
/// </summary>
/// <param name="path"></param>
private void Connect(String path)//连接ftp
{
// 根据uri创建FtpWebRequest对象
reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(path));
// 指定数据传输类型
reqFTP.UseBinary = true;
// ftp用户名和密码
reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
}
#endregion
#region ftp登录信息
/// <summary>
/// ftp登录信息
/// </summary>
/// <param name="ftpServerIP">ftpServerIP</param>
/// <param name="ftpUserID">ftpUserID</param>
/// <param name="ftpPassword">ftpPassword</param>
public void FtpUpDown(string ftpServerIP, string ftpUserID, string ftpPassword)
{
this.ftpServerIP = ftpServerIP;
this.ftpUserID = ftpUserID;
this.ftpPassword = ftpPassword;
}
#endregion
#region 获取文件列表
/// <summary>
/// 获取文件列表
/// </summary>
/// <param name="path"></param>
/// <param name="WRMethods"></param>
/// <returns></returns>
private string[] GetFileList(string path, string WRMethods)//上面的代码示例了如何从ftp服务器上获得文件列表
{
string[] downloadFiles;
StringBuilder result = new StringBuilder();
try
{
Connect(path);
reqFTP.Method = WRMethods;
WebResponse response = reqFTP.GetResponse();
StreamReader reader = new StreamReader(response.GetResponseStream(), System.Text.Encoding.UTF8);//中文文件名
string line = reader.ReadLine();
while (line != null)
{
result.Append(line);
result.Append("\n");
line = reader.ReadLine();
}
// to remove the trailing '\n'
result.Remove(result.ToString().LastIndexOf('\n'), 1);
reader.Close();
response.Close();
return result.ToString().Split('\n');
}
catch (Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.Message);
downloadFiles = null;
return downloadFiles;
}
}
public string[] GetFileList(string path)//上面的代码示例了如何从ftp服务器上获得文件列表
{
return GetFileList("ftp://" + ftpServerIP + "/" + path, WebRequestMethods.Ftp.ListDirectory);
}
public string[] GetFileList()//上面的代码示例了如何从ftp服务器上获得文件列表
{
return GetFileList("ftp://" + ftpServerIP + "/", WebRequestMethods.Ftp.ListDirectory);
}
#endregion
#region 下载文件
/// <summary>
/// 下载文件
/// </summary>
/// <param name="filePath"></param>
/// <param name="fileName"></param>
/// <param name="errorinfo"></param>
/// <returns></returns>
public bool Download(string ftpfilepath, string filePath, string fileName, out string errorinfo)////上面的代码实现了从ftp服务器下载文件的功能
{
try
{
filePath = filePath.Replace("我的电脑\\", "");
String onlyFileName = Path.GetFileName(fileName);
string newFileName = filePath + onlyFileName;
if (File.Exists(newFileName))
{
errorinfo = string.Format("本地文件{0}已存在,无法下载", newFileName);
return false;
}
ftpfilepath = ftpfilepath.Replace("\\", "/");
string url = "ftp://" + ftpfilepath;
Connect(url);//连接
reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
Stream ftpStream = response.GetResponseStream();
long cl = response.ContentLength;
int bufferSize = 2048;
int readCount;
byte[] buffer = new byte[bufferSize];
readCount = ftpStream.Read(buffer, 0, bufferSize);
FileStream outputStream = new FileStream(newFileName, FileMode.Create);
while (readCount > 0)
{
outputStream.Write(buffer, 0, readCount);
readCount = ftpStream.Read(buffer, 0, bufferSize);
}
ftpStream.Close();
outputStream.Close();
response.Close();
errorinfo = "";
return true;
}
catch (Exception ex)
{
errorinfo = string.Format("因{0},无法下载", ex.Message);
return false;
}
}
#endregion
#region 获得ftp上文件大小
/// <summary>
/// 获得ftp上文件大小
/// </summary>
/// <param name="filename"></param>
/// <returns></returns>
public long GetFileSize(string filename)
{
long fileSize = 0;
filename = filename.Replace("\\","/");
try
{
// FileInfo fileInf = new FileInfo(filename);
//string uri1 = "ftp://" + ftpServerIP + "/" + fileInf.Name;
// string uri = filename;
string uri = "ftp://" + filename;
Connect(uri);//连接
reqFTP.Method = WebRequestMethods.Ftp.GetFileSize;
FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
fileSize = response.ContentLength;
response.Close();
}
catch (Exception ex)
{
// MessageBox.Show(ex.Message);
}
return fileSize;
}
#endregion
#region 获得文件明晰
/// <summary>
/// 获得文件明晰
/// </summary>
/// <returns></returns>
public string[] GetFilesDetailList()
{
return GetFileList("ftp://" + ftpServerIP + "/", WebRequestMethods.Ftp.ListDirectoryDetails);
}
/// <summary>
/// 获得文件明晰
/// </summary>
/// <param name="path"></param>
/// <returns></returns>
public string[] GetFilesDetailList(string path)
{
path = path.Replace("\\", "/");
return GetFileList("ftp://" + path, WebRequestMethods.Ftp.ListDirectoryDetails);
}
#endregion
}
机器人
2011-01-09
打赏
举报
回复
最简单的是用 clickonce 部署代码。
wuyq11
2011-01-09
打赏
举报
回复
一般都是通过web services/WCF查询服务器进行升级
配置XML文件保存版本信息,查询服务器获取版本如是最新版本就不要升级
还可使用smart client
文件覆盖进行软件升级File.WriteAllText("test.bat",
@"@echo off
:run
del %1 >nul
if exist %1 goto run
del test.bat
");
ProcessStartInfo p= new ProcessStartInfo();
p.FileName = "test.bat";
p.Arguments = System.Reflection.Assembly.GetExecutingAssembly().GetModules()[0].FullyQualifiedName;
p.WindowStyle = ProcessWindowStyle.Hidden;
Process.Start(p);
http://topic.csdn.net/u/20090422/08/69f9713b-3982-4313-ab11-7fb6eefdcf93.html
C#
Winform版本
自动更新
代码
.netWinform版本
自动更新
代码
实现winform
程序
与服务器版本自动同步
C#
程序
自动
升级
的源码
把写
代码
过程重要的
代码
段珍藏起来,如下的
代码
内容是关于
C#
程序
自动
升级
的的
代码
。 <?xml version="1.0" encoding="utf-8" ?> <Content> <Project id=&...
C#
实现
自动更新
之(
程序
升级
包制作)
③有的
程序
必须要
求
用户进行更新才能继续使用,所以
程序
自动更新
是有必要的; ④手动更新就是用户可以随时更新
程序
,不需要严格的控制版本问题;
自动更新
的目的就是将服务器上的更新文件拷贝到本地执行目录中,...
C#
winform
程序
自动更新
小记
最近给
程序
加了一个
自动更新
的功能,使用的是一个开源库,也花了点时间拜读了下源码,
代码
还是很有学习的价值的,这里做下小结。 开源库地址:https://github.com/ravibpatel/AutoUpdater.NET, 有需要的小伙伴可以...
C#
自动更新
程序
(
C#
.Net)
自动更新
程序
C#
110,545
社区成员
642,580
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章