现在客户端自动更新 一般要用到更新程序,这样就是两个项目,两个exe了 所以对我这来说比较反感
所以就选择了另外一种方法 cmd
由于是自动更新客户端 且是内置的
所以要关闭自身
但是cmd在process执行的时候 属于这个程序 如果关闭主线程这个线程也同样被终止了
所以我只能用外置bat来执行cmd了。
string b = System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName;
这是获取本地文件路径 比如有快捷方式的。。你总不能让人家换个名字吧
这是要写入的cmd命令string.Format("taskkill /im \"BigcraftVersionUpdate.exe\"\r\nping 127.0.0.1 -n 2 >nul\r\ndel \"{0}\"\r\nrename \"{1}\" \"{2}\"\r\nstart {3}\r\ndel %0", b, "Bigcraft-1128046.exe", b.Substring(b.LastIndexOf("\\") + 1), b.Substring(b.LastIndexOf("\\") + 1))
string.Format("taskkill /im \"BigcraftVersionUpdate.exe\" //这是我的程序名字 是固定的
\r\n //cmd里面仅仅\n是不吃的 必须要\r\n才能换行
ping 127.0.0.1 -n 2 >nul \\由于结束程序有延时 所以我让他缓一会再进行后续操作
\r\n
del \"{0}\" //删除本地文件
\r\n
rename \"{1}\" \"{2}\" 重命名下载的文件为本地文件 {1}传入下载的文件路径 我这里就设置的死路径
\r\n
start {3} //开启应用程序
\r\n
del %0", //这里是删除bat文件 不然看着麻烦
b //要taskkill的本地文件
, "Bigcraft-1128046.exe" //新客户端名称
, b.Substring(b.LastIndexOf("\\") + 1) //重命名新客户端为客户端的名称
, b.Substring(b.LastIndexOf("\\") + 1) //运行新客户端
)
public static void RunCmd(string cmd)
{
string htmlfilename = DateTime.Now.ToString("yyyyMMdd_HHmmss") + "_tmp.bat"; //保存文件的路径
new FileOperate().Write_Txt(htmlfilename, cmd, Encoding.Default);
Process.Start(htmlfilename);
}
<span style="white-space:pre"> </span>public void Write_Txt(string FileName, string Content, Encoding code)
{
string htmlfilename = FileName; //保存文件的路径
string str = Content;
StreamWriter sw = null;
{
try
{
sw = new StreamWriter(htmlfilename, false, code);
sw.Write(str);
sw.Flush();
}
catch { }
}
sw.Close();
sw.Dispose();
}