如何找出哪个进程已启动我的exe?

时间:2014-09-16 13:56:11

标签: c# windows process

  

有没有办法找出c#中哪个进程启动了我的进程?

我有两个exes A.exe(控制台应用程序)和B.exe(GUI)。 现在A.exe只能由B.exe启动而不是其他任何东西。

欢迎任何想法。

4 个答案:

答案 0 :(得分:3)

基本上你有一个控制台应用程序(A.exe)和GUI应用程序(B.exe)和A.exe中的逻辑只能在它通过B.exe而不是任何其他进程或用户执行时执行

您可以通过将参数传递给A.exe,

来实现它

假设你如何从GUI应用程序调用A.exe,

Process process = new Process();
ProcessStartInfo startInfo = new ProcessStartInfo();
process.StartInfo = startInfo;

//Set argument as "1"
startInfo.Arguments = "1";
startInfo.FileName = "A.exe path";
process.Start();

在执行任何逻辑检查之前,在控制台应用程序的主要方法中,如果参数包含1以继续。

static void Main(string[] args)
{
    //Proceed only if argument contains "1"
    if (null != args && args.Length > 0 && args[0].Equals("1"))
     {

     }
}

答案 1 :(得分:2)

1st - 进程不是由用户启动的,它始终由另一个进程启动,在这种情况下,您可能意味着' explorer.exe'。

第二 - 这有什么问题:How to get parent process in .NET in managed way

MORE:

创建一次性密码,而不是传递已修复的参数并创建I'm your master, I have a right to call you,而每个进程都知道如何创建参数并读取它。它的种子可以是HH:MM:SS,你现在应该检查now-1 sec,以防万一你刚启动它时就会出现这种情况。

答案 2 :(得分:1)

您可以为A.exe添加一个特殊参数并从B.exe发送它,例如进程B ID(ProcessID),​​并在进程A启动时检查它

例如:

从流程B:        A.exe 11233

其中11233是流程B ID

并且在进程A main(string [] args)中检查进程ID 11233是否用于B.exe

加密进程ID以进行额外验证(以确保没有人运行你的exe,除了你的其他进程),因为任何人都可以看到执行进程a时使用的已发送args

希望这有帮助

答案 3 :(得分:0)

我不确定这是否是您所需要的,但您可以尝试在方法中使用Environment.StackTrace以相反的顺序查看调用层次结构,这意味着从您内部的方法开始返回到哪里你的申请开始了。

MSDN的说明:

  

StackTrace属性以反向时间顺序列出方法调用   顺序,即,最先描述最近的方法调用,和   为每个方法调用列出一行堆栈跟踪信息   堆栈。但是,StackTrace属性可能不会报告多少   方法由于在期间发生的代码转换而按预期调用   优化

希望这有帮助。