自我更新申请问题

Zom*_*eep 4 c# assemblies file

我一直在寻找一个简单的机制来自我更新可执行文件.(由于应用程序的性质,我不能使用Click-Once - 相信我这个)

我注意到飞行中的程序集可以将自己移动到磁盘上的另一个位置,大概是因为执行程序集实际上是内存中的副本),并且文件的原始位置可以被覆盖.通过以下概念证明片段证明了这一点......

string assemblyStart = System.Reflection.Assembly.GetExecutingAssembly().Location;
Console.WriteLine(assemblyStart);

if(File.Exists(@"C:\ANewExe.exe")) 
{
    File.Delete(@"C:\ANewExe.exe");
}
File.Move(assemblyStart,@"C:\ANewExe.exe");
string assemblyMoved = System.Reflection.Assembly.GetExecutingAssembly().Location;
Console.WriteLine(assemblyMoved);  // still reports as the original location

File.WriteAllText(assemblyStart,"some text");
Run Code Online (Sandbox Code Playgroud)

在我的XP开发系统中,这会导致程序集文件被移动到c:\ANewExe.exe,并且原始文件位置将填充文本"some text".

我想我的问题是,这是一种安全和/或可靠的方法,可以在XP版本的Windows中使用,或者还有其他方法可以实现这一功能吗?这是否会被我无法测试的AV系统检测为可能的病毒行为?

TIA

Fre*_*eit 6

Notepad ++使用GUP - http://gup-w32.sourceforge.net/.值得一看.

应用程序的性质是否必须保持运行?让更新程序下载新的EXE,覆盖当前的EXE,然后提示重新启动应用程序似乎要容易得多.