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

时间:2010-07-02 21:34:58

标签: c# .net multithreading process

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

4 个答案:

答案 0 :(得分:2)

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

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

但是,System.Process课程中有一些功能可以帮助您模拟您的目标。

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

没有。无论如何,这将是一个非常糟糕的主意,因为它可能会导致各种令人讨厌的事情发生。另一个程序无法知道它应该初始化什么以及托管程序已经初始化的内容等。

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

答案 3 :(得分:0)

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

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