另一种选择是:当主应用程序想要更新自身时,它会生成一个新的更新程序进程,然后关闭自身。在此期间,生成的进程等待主应用程序关闭(即进程消失),然后更新所有必要的文件(包括 .exe 文件)。之后,它只需重新启动主应用程序并退出更新程序进程。
我基本上同意Stefan's Answer的观点,但如果您想在Windows Vista或Windows 7上正确处理UAC,并且您的应用程序已经正确安装在Program Files文件夹下或需要安装其他需要提升权限的依赖项,则可能无法正常工作。
在这种情况下,您可以执行基于msi的安装/补丁或安装运行所需安全性以覆盖Program Files文件夹中的文件的Windows服务。
如果您的应用程序是交互式的,则另一种选择是像Igor Brejc建议的那样生成一个新进程来进行更新,从而使您的应用程序有机会在更新期间提示提升权限。无论是交互式还是非交互式场景,使用上述补丁或Windows服务选项都将提供更好的用户体验。