在另一个exe中包含一个exe

时间:2011-10-10 13:49:14

标签: c# .net file

假设我有一个名为 mainprogram.exe 的可执行文件,另一个名为 Update.exe 。我想要实现的是:当启动Update.exe时,它将mainprogram.exe替换为例如C:\ Program Files \ MyProgram \ mainprogram.exe。关键是要包含需要在Update.exe中替换的可执行文件,这样它就是一体化解决方案。

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

4 个答案:

答案 0 :(得分:4)

建筑:

  1. 将UPDATE.EXE复制为作为资源嵌入MAIN.EXE
  2. 在运行时(更新时间)

    1. 将UPDATE.EXE从资源下载到硬盘
    2. 使用适当的参数启动UPDATE.EXE(命令行参数,具体取决于具体情况)
    3. 让UPDATE.EXE尝试删除MAIN.EXE将创建并保持打开的公共文件
    4. 当MAIN.EXE退出时,将释放该文件的句柄,允许UPDATE.EXE继续执行它应该做的事情 - 用新版本替换MAIN.EXE
    5. 从UPDATE.EXE
    6. 启动MAIN.EXE
    7. (可选)从MAIN.EXE中删除UPDATE.EXE,因为您现在不需要它。

答案 1 :(得分:1)

您可以使用SFX存档 - 非常类似于安装程序和“自我提取”。许多归档程序允许它,或者您可以在.NET中编写一个安装项目,如果您不得不在更新程序中包含所有文件,它们将执行相同的操作。

答案 2 :(得分:1)

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

Adding and Editing Resources (Visual C#)

答案 3 :(得分:1)

您想要的是“设置项目”。这将允许您捆绑以这种方式部署此类更新所需的任何文件。

这是MSDN link for doing this

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