C# 从应用程序更新应用程序

C# 从应用程序更新应用程序,c#,auto-update,C#,Auto Update,我正在尝试在我的应用程序中开发一个功能,使用户可以检查更新,如果新版本存在(在FTP服务器上),它将下载所有新文件并运行应用程序的新实例 我成功地检查了更新(通过比较XML文件)并将zip文件从FTP服务器下载到临时文件夹中。然而,一旦我开始将文件复制到主文件夹中,应用程序突然崩溃,因为我尝试复制的所有dll都已在使用 我提出了两种可能的方法: 1) 将主文件夹下的所有文件重命名为:originalname.dll.bak(将.bak追加到其名称的末尾)。然后复制原始文件并重新启动应用程序。在打

我正在尝试在我的应用程序中开发一个功能,使用户可以检查更新,如果新版本存在(在FTP服务器上),它将下载所有新文件并运行应用程序的新实例

我成功地检查了更新(通过比较XML文件)并将zip文件从FTP服务器下载到临时文件夹中。然而,一旦我开始将文件复制到主文件夹中,应用程序突然崩溃,因为我尝试复制的所有dll都已在使用

我提出了两种可能的方法:

1) 将主文件夹下的所有文件重命名为:originalname.dll.bak(将.bak追加到其名称的末尾)。然后复制原始文件并重新启动应用程序。在打开新实例(更新的exe文件)时,我们要做的第一件事就是删除以.bak结尾的旧文件。这种方法的一个问题是,我可以轻松地将当前正在运行的进程重命名为include.bak,但我不确定是否可以对dll文件执行相同的操作(尚未实现此解决方案)

2) 创建一个外部应用程序(例如控制台应用程序),该应用程序将从主应用程序执行,whcih将处理更新过程。打开此外部更新程序后,我的主应用程序将立即关闭,以便我们可以确保新文件的复制不会出现问题


我以前没有这样做过,因此欢迎提出任何意见和建议。此外,如果有更好的方法来处理更新过程,我将非常乐意实施它。

单击一次是否是一个选项?我更喜欢第二个选项,因为第一个选项看起来像一个模糊的业务。如果我没有错的话,这就是为什么你要将exe单独用于安装/卸载和运行应用程序。这就是为什么你需要关闭应用程序。我已经用你提供的第二种方式完成了一个类似这样的项目,两年后,仍然认为这将是更好的解决方案来处理这种情况。我使用install shield le部署我的应用程序,因此,单击一次将不是一个选项。我可能会选择第二个选项,只是想看看是否有更好的方法是
单击一次
一个选项?我更喜欢第二个选项,因为第一个看起来像一个阴暗的企业。如果我没有错的话,这就是为什么你要将exe单独用于安装/卸载和运行应用程序。这就是为什么你需要关闭应用程序。我已经用你提供的第二种方式完成了一个类似这样的项目,两年后,仍然认为这将是更好的解决方案来处理这种情况。我使用install shield le部署我的应用程序,因此,单击一次将不是一个选项。我可能会选择第二种方法,只是想看看是否有更好的方法