我一直在寻找一种简单的自动更新可执行文件的机制。 (由于应用程序的性质,我无法使用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");
在我的XP开发系统中,这会导致程序集文件移动到c:\ANewExe.exe
,原始文件位置将填充文本“some text”。
我想我的问题是,这是一种安全和/或可靠的方法,可以在XP版本的Windows中使用),还是有其他方法可以实现这一功能?这是否会被我无法测试的AV系统检测为可能的病毒行为?
TIA
答案 0 :(得分:6)
Notepad ++使用GUP - http://gup-w32.sourceforge.net/。值得一看。
应用程序的性质是否必须保持运行?让更新程序下载新的EXE,覆盖当前的EXE,然后提示重新启动应用程序似乎要容易得多。