gpt4 book ai didi

c# - Process.Start() 是否以任何方式连接到可执行文件中?

转载 作者:太空宇宙 更新时间:2023-11-03 23:39:45 25 4
gpt4 key购买 nike

System.Diagnostics.Process.Start() 是否挂接到它启动的进程中?

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

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

最佳答案

I would like to find a way to run a process from a C# app without the process knowing that it started as a result of the C# app

In other words, does the process being started have any way of telling that it was run from a C# app, or is it just like any other file being opened?

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

代理

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

在下图中,A 是您的流程; Z 是您生成的进程。 ---> 是生成操作。

改变:

A ---> Z

...到:

A ---> P ---> Z

...其中 P 是代表您运行 Z 的中间代理进程。 P 创建进程后立即退出。 Z 回溯到 A 的可能性极小。

制作代理 native 代码

I would like to find a way to run a process from a C# app without the process knowing that it started as a result of the C# app

要进一步隐藏直接父级不是 .NET 的事实,请考虑使用 native 代码制作代理。

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

与之前的 C# 或 native 代码中的中间代理示例不同,仍然存在可能将进程沿袭学习回您的 .NET 应用程序的可能性。

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

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

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

告诉我更多

关于c# - Process.Start() 是否以任何方式连接到可执行文件中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29481444/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com