关于CS程序的更新问题

herott632482577 2011-03-01 02:51:58
private void DownloadFile(string URL, string filename, System.Windows.Forms.ProgressBar prog)
{
try
{
System.Net.HttpWebRequest Myrq = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(URL);
System.Net.HttpWebResponse myrp = (System.Net.HttpWebResponse)Myrq.GetResponse();
long totalBytes = myrp.ContentLength;
if (prog != null)
{
prog.Minimum=0;
prog.Maximum=this.lstvPro.Items.Count;
}
System.IO.Stream st = myrp.GetResponseStream();
System.IO.Stream so = new System.IO.FileStream(filename, System.IO.FileMode.Create);
// System.IO.Stream so = new System.IO.FileStream(filename, System.IO.FileMode.Append);

long totalDownloadedByte = 0;
byte[] by = new byte[1024];
int osize = st.Read(by, 0, (int)by.Length);
while (osize > 0)
{
totalDownloadedByte = osize + totalDownloadedByte;
System.Windows.Forms.Application.DoEvents();
so.Write(by, 0, osize);
osize = st.Read(by, 0, (int)by.Length);
}
if (prog != null)
{
prog.Value++;
}
so.Close();

st.Close();
}
catch (System.Exception)
{
throw;
}
}
现在文件都可以下载下来,但是点更新就报未处理的“System.IO.IOException”类型的异常出现在 Updater.exe 中。

其他信息: 该进程无法访问文件“c:\documents and settings\administrator\桌面\updater\bin\debug\tip1610.exe”,因为该文件正由另一进程使用。

是进程问题吗?求教
...全文
136 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
wuyq11 2011-03-01
  • 打赏
  • 举报
回复
一般都是通过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);

herott632482577 2011-03-01
  • 打赏
  • 举报
回复
是只读
友林 2011-03-01
  • 打赏
  • 举报
回复
"c:\documents and settings\administrator\桌面\updater\bin\debug"这个文件夹是不是只读的啊?
herott632482577 2011-03-01
  • 打赏
  • 举报
回复
tip1610.exe只是个新的更新上去的文件
友林 2011-03-01
  • 打赏
  • 举报
回复
tip1610.exe是你的主程序吗?一般cs的自动更新下载下来的文件会先放到一个临时文件中。然后关闭自己,启动另外一个exe来复制文件。复制完成后,再启动主程序。
herott632482577 2011-03-01
  • 打赏
  • 举报
回复
好象是这个文件占用~~~~有什么解决办法吗
shaofei830927 2011-03-01
  • 打赏
  • 举报
回复
写上 finily 释放文件释放流 在运行一遍 第二遍就可以了
之前有异常的时候直接跳出没有释放资源 以后再使用的话 就会在使用资源的地方报错了
king_wen 2011-03-01
  • 打赏
  • 举报
回复

每天回帖即可获得10分可用分
herott632482577 2011-03-01
  • 打赏
  • 举报
回复
System.IO.Stream so = new System.IO.FileStream(filename, System.IO.FileMode.Create);
走到这里就直接跳CATCH了

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧