代码之家  ›  专栏  ›  技术社区  ›  ZombieSheep

自我更新申请问题

  •  4
  • ZombieSheep  · 技术社区  · 15 年前

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

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

    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”填充。

    我想我的问题是,这是一种安全和/或可靠的方法,可以跨版本的Windows从XP向上使用),还是有其他方法来实现这一功能?我没有权限测试的AV系统是否会检测到病毒行为?

    短暂性脑缺血发作

    1 回复  |  直到 15 年前
        1
  •  6
  •   Freiheit    15 年前

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

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