Process.Start()是否以任何方式挂钩到可执行文件中?

时间:2015-04-06 23:44:27

标签: c#

System.Diagnostics.Process.Start()是否会挂钩它开始的过程?

我想找到一种方法从C#app 运行流程,而该流程知道它是由C#应用程序启动的。这是Process.Start()的默认行为,还是我需要做任何不同/额外的事情?

换句话说,正在启动的进程是否有任何方法可以告诉它是从C#应用程序运行的,还是就像其他任何文件被打开一样?

1 个答案:

答案 0 :(得分:3)

  

我想找到一种从C#应用程序运行进程的方法,而不知道它是由C#应用程序启动的进程

     

换句话说,正在启动的进程是否有任何方法可以告诉它是从C#应用程序运行的,还是就像其他任何文件被打开一样?

C#应用程序作为Window的进程运行,由于这一事实,生成的进程可能使用Win32函数Process32First()来查询有关父进程的信息,特别是parent process ID。现在完全有可能的是,当子进程获得此信息时,父进程可能已终止,并且Windows重新使用进程ID进行完全不同的进程。无论如何,子进程可以测试“父”进程以了解它是否是.NET。

代理

如果你想阻止子进程学习你的进程(在这种情况下是否是.NET),那么你可以通过代理生成它。

在下图中, A 是您的流程; Z 是您的衍生过程。 --->是一个产卵手术。

变化:

A ---> Z

...为:

A ---> P --->的ž

...其中 P 是代表您运行 Z 的中间代理流程。 P 在创建流程后立即退出。 Z 非常不可能追溯到 A

制作代理原生代码

  

我想找到一种从C#应用程序运行进程的方法,而不知道它是由C#应用程序启动的进程

为了进一步隐藏直接父级不是.NET的事实,请考虑使用本机代码生成代理。

使代理服务器为进程外COM服务器

与c#或本机代码中的先前中间代理示例不同,仍然存在可以将流程沿袭学习回到.NET应用程序的可能性。

但是,如果 A 进程实例化OoP COM服务器 P 中托管的COM对象,则生成的进程将无法将其追溯到您,因为我我很确定COM激活与产生新进程不同,因此可能不会继承。特别是如果COM服务器长时间运行并且在A 之前运行

---> **P**...
          |
          |
          V
          **Z**...

------> **A**...

告诉我更多