执行一个新的完全独立的进程,该进程封装在一个可执行文件中,而不需要为独立进程将文件写入磁盘
Execute a new entirely seperate process packed inside of an executable without a file written to disk for seperate process
我知道这个标题听起来有点让人不知所措,但关键概念很简单。
我对语言不太挑剔,它可以是任何.NET语言,但我更喜欢C++。
我想将已编译的可执行文件存储在另一个可执行文件中,该可执行文件在运行时将从内存运行另一个执行文件,而不是从磁盘运行。
这可能吗?如果可能,请有人举个例子?
我指的不是DLL。我说的是一个独立的可执行文件
您可以在C#中创建一个存根EXE,该EXE使用进程中的IPC从字节加载程序集,然后使用反射查找并运行Main()
方法
但是,EXE仍然需要从磁盘上运行。
您需要在磁盘上运行一些东西,这是无法解决的。您可以使自己的可执行文件成为用于加载其他exe的填充程序。你的主机程序看起来像这样:
class Program
{
public static void Main(string[] args)
{
if (args.Length > 0 && args[0] == "launch")
{
AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;
AppDomain.CurrentDomain.ExecuteAssemblyByName("TestConsoleApp", "some", "args", DateTime.Now.ToString());
}
else
{
RunNormally();
}
}
private static void RunNormally()
{
string fileName = Process.GetCurrentProcess().MainModule.FileName;
fileName = fileName.Replace(".vshost", ""); // hack -- if launched in the debugger must remove this.
Process.Start(fileName, "launch");
// do other stuff
}
private static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
var asmName = new AssemblyName(args.Name);
var resourceName = Assembly.GetExecutingAssembly().GetManifestResourceNames().FirstOrDefault(r => r.Contains(asmName.Name));
if (resourceName != null)
{
using (var memoryStream = new MemoryStream())
{
Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName).CopyTo(memoryStream);
return Assembly.Load(memoryStream.GetBuffer());
}
}
return null;
}
}
这假设您在宿主可执行文件中有一个程序集"TestConsoleApp"作为"嵌入式资源"。
相关文章:
- boost::进程间消息队列引发错误
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- 是否可以通过C++扩展强制多个python进程共享同一内存
- IPC使用多个管道和分支进程来运行Python程序
- 异常属于C++中的线程还是进程
- 独立读取-修改-写入顺序
- WMI检测进程创建事件-c++
- c++多进程编写一个唯一的文件
- 如何在C++中将函数发送到另一个进程
- 我们能否在stm32f中使用硬件定时器控制两个独立的进程
- 使用system()创建独立的子进程
- 如何在C++中创建总是在循环中接受新输入的独立进程
- 是否有可能以及如何使用log4cxx库每个进程创建独立的记录仪
- DBUS 代码在放置在守护进程内时崩溃,但在没有守护进程代码的独立独立 main() 函数中运行良好
- 执行一个新的完全独立的进程,该进程封装在一个可执行文件中,而不需要为独立进程将文件写入磁盘
- 无法从挂起进程的独立线程中的管道中读取
- 独立 DLL 之间的内部进程通信
- 独立的多线程进程同时阻塞
- 在C++ (Windows) 中创建独立的进程