C# 使用c更新我的应用程序#

C# 使用c更新我的应用程序#,c#,updates,C#,Updates,我想创建一个更新程序来检查主.exe文件是否已更新。我必须创建一个更新程序文件来关闭主应用程序并覆盖.exe文件吗?或者有其他方法吗?必须。而且它更复杂。出于安全原因,普通用户无权替换可执行文件。由于程序文件夹受到保护,因此需要升级权限 我将开始研究安装技术,并在安装之前进行版本检查。这并不难 我必须创建一个更新程序文件来关闭主应用程序并覆盖.exe文件,还是有其他方法 如果要覆盖exe,则必须退出当前运行的exe。我目前的处理方式如下(这是一个Winforms应用程序) 1) 从interne

我想创建一个更新程序来检查主.exe文件是否已更新。我必须创建一个更新程序文件来关闭主应用程序并覆盖.exe文件吗?或者有其他方法吗?

必须。而且它更复杂。出于安全原因,普通用户无权替换可执行文件。由于程序文件夹受到保护,因此需要升级权限

我将开始研究安装技术,并在安装之前进行版本检查。这并不难

我必须创建一个更新程序文件来关闭主应用程序并覆盖.exe文件,还是有其他方法

如果要覆盖exe,则必须退出当前运行的exe。我目前的处理方式如下(这是一个Winforms应用程序)

1) 从internet执行更新检查
2) 下载更新开始到临时文件夹(yourapp/temp_update)
3) 下载完成后,应用程序使用
Process.Start
启动updater.exe
4) updater.exe通过命令行传递参数,即exe名称和文件夹位置,以便

知道等待退出的进程(您的主应用程序)
在何处复制新的exe(和任何其他文件)
乙二醇

4) 主应用程序退出
6) updater.exe调用
Process.Start()
重新启动主应用程序;然后更新.exe 5) updater.exe检测到退出-它现在可以将新的exe复制到旧的exe上

updater.exe本身很少需要更新-我将其嵌入到exe中(这通常是正常的,因为update.exe很小)-然后新的exe将提取它并复制到现有的updater.exe上

我已经看到了其他一些使用
AppDomain
s的可能替代方法,其中您的exe是一个非常轻量级的可执行文件,它检查更新,然后将您的“主应用程序”加载到一个新的AppDomain:(伪代码)


然而,这些方法的问题并不在于你如何轻量级地创建初始exe,你可能需要更新它,然后你又回到了原来的问题

需要更多信息,到目前为止您的设计是什么?您可以使用ClickOnce,它可以处理自动更新,但也有一些限制。
由于程序文件夹受到保护,它需要升级权限。
Windows中的管理员帐户有问题吗?@因为没有用户是管理员,至少如果他比程序员更聪明;)非常感谢。有可能看到关闭应用程序和启动更新程序的方法的示例吗?@AsAs有更新的答案。你对更新程序的那部分有什么特别的问题吗?
var process = new Process();
process.StartInfo.FileName = "updater.exe"
process.StartInfo.Arguments = " yourApp.exe temp_update"
process.Start();
//now exit your app.
Environment.Exit(0);  //if Winforms app then just call `.Close()` on your main form
public static void Main(string[] args)
{
      //dont reference MyApp.dll from this exe!
      if(CheckForUpdate())
      {  
         //download new MyApp.dll
      }

     //load MyApp.dll in a new AppDomain
}