在另一个exe中包含一个exe

问题描述:

假设我有一个名为的可执行文件mainprogram.exe,另一个叫做Update.exe。我想达到的目标是:当Update.exe启动时,它将mainprogram.exe替换为例如C:\ Program Files \ MyProgram \ mainprogram.exe。重点是在Update.exe中包含需要替换的可执行文件,因此它将是一个全功能的解决方案。在另一个exe中包含一个exe

另请注意,我无法创建Update.exe,它将从互联网下载mainprogram.exe,它必须已包含在Update.exe中。

+0

通常(后XP,或在企业环境中),'mainprogram.exe'没有管理员权限运行,'Update.exe'需要它们。这可能是一个小绊脚石。 – MSalters

+0

通常,这不是所谓的安装程序吗? – spender

建筑:

  1. 副本UPDATE.EXE被嵌入到MAIN.EXE作为一种资源

在运行时(更新时间)

  1. 下降UPDATE.EXE从资源到硬盘驱动器
  2. 使用适当的参数(命令行参数,取决于具体情况)启动UPDATE.EXE
  3. 有UPDATE.EXE尝试删除MAIN.EXE将创建并将其打开的常见文件
  4. 当MAIN.EXE退出时,该文件的句柄将被释放,从而允许UPDATE.EXE继续执行它应该执行的操作 - 替换MAIN.EXE与新版本
  5. 从UPDATE.EXE启动MAIN.EXE
  6. (可选)从MAIN.EXE删除UPDATE.EXE,因为您现在不需要它。

您可以使用SFX存档 - 非常像安装程序和“自我提取”。许多归档程序都允许它,或者你可以在.NET中编写一个安装项目,如果你不得不在updater中包含所有文件,它也会做同样的事情。

您可以使用.NET资源并通过Properties.Resources访问它们。如果要将资源的内容复制到硬盘,可以使用System.IO.File.WriteAllBytes。

Adding and Editing Resources (Visual C#)

你想要什么叫做 “安装项目”。这将允许你捆绑这样的更新所需的任何文件,以这种方式进行部署。

这里是MSDN link for doing this

简而言之,您正在创建一个安装程序包,但您可以限制安装程序的功能以仅替换指定的文件。