C# 软件更新在文件覆盖上出现问题
就是如何更新文件下载后,关闭主程序,拷贝文件到指定文件夹,然后在启动主程序。
如果不关闭主程序,直接覆盖以前dll文件发生异常-“文件被其他进程调用中,不能对其进行操作”
望高手解决
------解决方案--------------------我最近也遇到了这个问题,最后解决办法就是通过启动另外一个程序用来关闭主程序所有进程,结束后将更新文件覆盖,最后重新启动主程序。
------解决方案--------------------当运行一个exe文件的时候,系统用内存映射的方法把文件装入到用户程序的内存空间中(除非文件在软盘或CD等媒介上)。
被内存映射的文件是不能被删除的。但是,该文件可以被
改名。
因此我们可以将自身exe文件改名,将新版本拷贝为当前的名字,然后重新启动程序。
比如:)
private void button1_Click(object sender, EventArgs e)
{
string exeFilename = Assembly.GetExecutingAssembly().Location;
string tmpFilename = Path.GetTempPath() + Guid.NewGuid();
File.Move(exeFilename, tmpFilename);
File.Copy(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System), "calc.exe"), exeFilename);
Application.Restart();
}}
------解决方案--------------------我遇到这种情况的时候建立了两个exe文件,其中A只做为启动B使用,检查更新以及操作更新的部分做到A里面,更新是更新的B文件,更新成功后打开B,这样的话就不影响了。