问题描述
我创建了一个具有更新系统的应用程序,这是非常规的:
此应用程序从以下位置安装和运行:
C:\Program Files (x86)\Application test
searchdata.exe
但在某个时候,我想出了一个好主意,即通过以下步骤制作一个更新系统:
- 点击更新按钮:检查
update.exe
可执行文件是否存在。
- 这是下载和进度条脚本:
private void backgroundWorker1_DoWork(object sender,DoWorkEventArgs e)
{
DownloadFileWithProgress("http://test.pro/installer/update.dat",AppDomain.CurrentDomain.BaseDirectory + "update.exe",ProgressBar1,Label4);
}
private void DownloadFileWithProgress(string DownloadLink,string TargetPath,ProgressBar Progress,Label LabelProgress)
{
int bytesProcessed = 0;
Stream remoteStream = null;
Stream localStream = null;
HttpWebResponse response = null;
try
{
WebRequest request = WebRequest.Create(DownloadLink);
double TotalBytesToReceive = 0;
var SizewebRequest = WebRequest.Create(new Uri(DownloadLink));
SizewebRequest.Method = "HEAD";
using (var WebResponse = SizewebRequest.GetResponse())
{
var fileSize = WebResponse.Headers.Get("Content-Length");
TotalBytesToReceive = Convert.Todouble(fileSize);
}
response = (HttpWebResponse)request.GetResponse();
if (response.StatusCode == HttpStatusCode.OK)
{
remoteStream = response.GetResponseStream();
string filePath = TargetPath;
localStream = File.Create(filePath);
byte[] buffer = new byte[1024];
int bytesRead = 0;
do
{
bytesRead = remoteStream.Read(buffer,buffer.Length);
localStream.Write(buffer,bytesRead);
bytesProcessed += bytesRead;
double bytesIn = double.Parse(bytesProcessed.ToString());
double percentage = bytesIn / TotalBytesToReceive * 100;
percentage = Math.Round(percentage,0);
if (Progress.Invokerequired)
{
Progress.Invoke(new MethodInvoker(() =>
{
Progress.Value = int.Parse(Math.Truncate(percentage).ToString());
}));
}
else
{
Progress.Value = int.Parse(Math.Truncate(percentage).ToString());
}
if (LabelProgress.Invokerequired)
{
LabelProgress.Invoke(new MethodInvoker(() =>
{
LabelProgress.Text = int.Parse(Math.Truncate(percentage).ToString()) + "%";
}));
}
else
{
LabelProgress.Text = int.Parse(Math.Truncate(percentage).ToString()).ToString() + "%";
}
}
while (bytesRead > 0);
}
else
{
throw new ArgumentException(response.StatusDescription,"Respuesta del Servidor");
}
}
catch (Exception ex)
{
MessageBox.Show("Error en DownloadFileWithProgress" + ex.Message);
}
finally
{
if (response != null)
response.Close();
if (remoteStream != null)
remoteStream.Close();
if (localStream != null)
localStream.Close();
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)