将程序作为线程执行而不是作为进程执行

有没有办法执行另一个程序,如记事本,作为一个线程,所以它与我的程序共享相同的内存空间? 所以,如果我的程序结束,记事本也会这样,记事本不会出现在任务管理器中,只是我的程序?

不,当然不适用于像记事本这样的非托管应用。

但是,对于托管应用程序,您可以使用System.Reflection的实用程序加载程序集并开始执行Main()方法(或者更确切地说是入口点)。

但是, System.Process类中有一些function可以帮助您模拟您要执行的操作。

理论上,您可以执行OS加载程序所做的相同工作 – 加载可执行文件,找到主入口点并从您的线程调用它。

请注意,您很可能会遇到各种app-compat问题,因为该可执行文件中的代码不希望以这种方式执行。

不会。在任何情况下,这都是一个非常糟糕的主意,因为它可能会导致各种令人讨厌的事情发生。 另一个程序无法知道它应该初始化什么以及托管程序已经初始化了什么等。

但是,您可以强制记事本关闭您的程序。 只需在应用程序关闭时创建的进程上调用Process.CloseMainWindow(nice)或Process.Kill(强制它死)。

不,这是不可能的(除非您尝试在单个流程中尝试一些奇怪的虚拟化风格环境。)

要确保记事本与您的应用程序一起消失,请创建一个作业对象,在启动记事本之前将应用程序分配给它。 程序关闭后,作业对象将被销毁,作业对象中的所有子进程也将被关闭。