自我更新申请问题

时间:2010-02-19 14:54:26

标签: c# file assemblies

我一直在寻找一种简单的自动更新可执行文件的机制。 (由于应用程序的性质,我无法使用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

1 个答案:

答案 0 :(得分:6)

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

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

相关问题