Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在另一个exe中包含exe_C#_.net_File - Fatal编程技术网

C# 在另一个exe中包含exe

C# 在另一个exe中包含exe,c#,.net,file,C#,.net,File,假设我有一个名为mainprogram.exe的可执行文件和另一个名为Update.exe的可执行文件。我想实现的是:当Update.exe启动时,它会用C:\Program Files\MyProgram\mainprogram.exe替换mainprogram.exe。关键是要在Update.exe中包含需要替换的可执行文件,使其成为一体式解决方案 还要注意的是,我无法创建Update.exe来从internet下载mainprogram.exe,它必须已经包含在Update.exe中。您可

假设我有一个名为mainprogram.exe的可执行文件和另一个名为Update.exe的可执行文件。我想实现的是:当Update.exe启动时,它会用C:\Program Files\MyProgram\mainprogram.exe替换mainprogram.exe。关键是要在Update.exe中包含需要替换的可执行文件,使其成为一体式解决方案


还要注意的是,我无法创建Update.exe来从internet下载mainprogram.exe,它必须已经包含在Update.exe中。

您可以使用SFX存档-工作原理与安装程序和“自解压缩”非常相似。许多存档程序都允许这样做,或者您可以在.NET中编写一个安装项目,如果您必须将所有文件都包含在更新程序中,它也会做同样的事情。

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

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

这是你的电话号码

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

在building中:

  • 将UPDATE.EXE作为资源嵌入MAIN.EXE中
  • 运行时(更新时间)

  • 将UPDATE.EXE从资源拖放到硬盘驱动器
  • 使用适当的参数(命令行参数,取决于具体情况)启动UPDATE.EXE
  • 让UPDATE.EXE尝试删除MAIN.EXE将创建的公用文件,并保持其打开状态
  • 当MAIN.EXE退出时,将释放该文件的句柄,允许UPDATE.EXE继续执行它应该执行的操作-用新版本替换MAIN.EXE
  • 从UPDATE.EXE启动MAIN.EXE
  • (可选)从MAIN.EXE中删除UPDATE.EXE,因为您现在不需要它

  • 通常(XP后或在公司环境中),
    mainprogram.exe运行时没有管理员权限,
    Update.exe
    需要管理员权限。这可能是一个小绊脚石。通常,这不是叫做安装程序吗?