2010-02-19 119 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