[英]Self-Updating, Download, Extract, and Replace Exe
我使用的是 Visual Studio 2015、C#、WPF。
我试图让MyProgram.exe
能够轻松更新自身。
我有将文件MyProgram.7z
下载到%UserProfile%\\AppData\\Local\\Temp\\
。
从7z
它将MyProgram.exe
提取到当前运行的MyProgram.exe
目录中。
当 7-Zip 提取开始时,程序会自行关闭以允许覆盖 exe。
// AppData Temp Directory
string tempDir = System.IO.Path.GetTempPath();
// MyProgram.exe Current Directory
string currentDir = Directory.GetCurrentDirectory().TrimEnd('\\') + @"\";
// ...
//
// Download Code Here
// Saves MyProgram.7z to AppData Temp
//
// ...
// Unzip MyProgram.7z
// Overwrite MyProgram.exe
//
using (Process extract = new Process())
{
extract.StartInfo.UseShellExecute = false;
extract.StartInfo.CreateNoWindow = false;
extract.StartInfo.RedirectStandardOutput = true;
extract.StartInfo.FileName = "7z.exe";
extract.StartInfo.Arguments = "-r -y e " + "\"" + tempDir + "MyProgram.7z" + "\"" + " -o\"" + currentDir + "\"" + " *";
// 7z.exe -r -y e "C:\Users\Matt\AppData\Local\Temp\MyProgram.7z" -o"C:\Program Files\MyProgram\" *
extract.Start();
}
// Exit Program
// 7-Zip will continue to run in the background after MyProgram.exe has exited
//
Environment.Exit(0);
我已经测试过了,它似乎可以工作。
有没有更好的方法来做到这一点? 这种方式有什么问题吗? 我喜欢在程序中而不是在单独的帮助程序中使用它。 在这种情况下,我还需要使用7z.exe
。
有没有办法像timeout 5 && 7z.exe ...
那样启动cmd
和链式命令,并在提取后重新启动程序?
您可能想查看Squirrel 。 它是一个开源库,可以完全管理桌面 Windows 应用程序的安装和更新。
GitHub 上提供了入门指南: https : //github.com/Squirrel/Squirrel.Windows/blob/master/docs/getting-started/0-overview.md 。
还有来自 Microsoft 的 ClickOnce 部署技术:https ://msdn.microsoft.com/en-us/library/142dbbz4(v= vs.90).aspx。
没有理由重新发明轮子。
除了直接启动7z
进程,您还可以:
cmd /c
进程,然后解压缩,重新启动应用程序cmd /c timeout 5 & [your unzip command] & MyProgram.exe
附注。 &
用于一个接一个执行多个命令
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.