2010-02-19 93 views
4

我一直在寻找一种简单的自我更新可执行文件的机制。 (由于应用程序的性质,我不能使用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,和原始文件位置充满文本“一些文字“。

我想我的问题是,这是一个安全和/或可靠的方法来使用跨XP版本的Windows上),还是有其他方式来实现此功能?这是否会被AV系统检测为可能的病毒行为,我无法进行测试?

TIA

回答

6

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

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

+0

同意,应用程序不必保持运行,并且我已经使系统到目前为止呼叫到专用的更新应用程序。事实上,当我不小心设置更新程序自行更新时,我只注意到概述的bahaviour。我预料到一个文件锁定异常,但它只是工作。鉴于这一发现,我想知道如果主系统本身可以处理事情是不是要调用一个外部应用程序是不是矫枉过正... – ZombieSheep 2010-02-19 15:01:23

+1

我会去与外部应用程序。它的工作是肯定的,并将继续这样做。 – 2010-02-19 15:02:51