C# WmAutoUpdate-有人用过吗?韩元';不要后退

C# WmAutoUpdate-有人用过吗?韩元';不要后退,c#,compact-framework,C#,Compact Framework,我构建了一个紧凑的框架应用程序,并使用WmAutoUpdate将新版本部署到移动设备()。有人用过这个吗?这很酷,但我有个问题 如果我在更新过程中导致应用程序崩溃,则应该通过将备份版本复制回主目录来恢复。这不起作用,因为exe文件被操作系统“锁定”,因为它当前正在使用。我可以验证这种情况,因为我也无法使用Windows资源管理器删除它。错误详细信息如下: System.IO.IOException was unhandled Message="IOException" StackTrace:

我构建了一个紧凑的框架应用程序,并使用WmAutoUpdate将新版本部署到移动设备()。有人用过这个吗?这很酷,但我有个问题

如果我在更新过程中导致应用程序崩溃,则应该通过将备份版本复制回主目录来恢复。这不起作用,因为exe文件被操作系统“锁定”,因为它当前正在使用。我可以验证这种情况,因为我也无法使用Windows资源管理器删除它。错误详细信息如下:

System.IO.IOException was unhandled
Message="IOException"
StackTrace:
     at System.IO.__Error.WinIOError(Int32 errorCode, String str)
     at System.IO.File.Move(String sourceFileName, String destFileName)
     at WmAutoUpdate.Updater.assertPreviousUpdate()
     at WmAutoUpdate.Updater..ctor(String url)
更新程序中的此行出错。assertPreviousUpdate()

当允许应用程序exe文件正常运行时(我不确定如何运行),代码会设法更新该文件。问题是它在回滚时不起作用

欢呼

Mark

我使用了WmAutoUpdate,发现了相同的问题。问题是,您可以移动实际运行进程的文件,但不能覆盖它们。如果选中更新部分,WmAutoUpdate会将正在运行的应用程序移动到备份目录,然后将更新版本写入原始目录。我已通过以下方式修复了回滚部分:

if (Directory.Exists(backupDir))
{
  string tmpDir = Path.Combine(Path.GetTempPath(),Path.GetFileNameWithoutExtension(Path.GetTempFileName()));
  Directory.Move(appPath, tmpDir);
  Directory.Move(backupDir, appPath);
}
首先,我们将运行中的应用程序文件移动到Temp中的随机目录中。然后我们将备份文件夹复制到应用程序的原始目录。当然,这将在设备的Temp目录中生成一个.TMP文件,以及一个包含实际运行进程的文件夹。您必须在生产代码中偶尔删除此临时文件夹

if (Directory.Exists(backupDir))
{
  string tmpDir = Path.Combine(Path.GetTempPath(),Path.GetFileNameWithoutExtension(Path.GetTempFileName()));
  Directory.Move(appPath, tmpDir);
  Directory.Move(backupDir, appPath);
}