有没有办法找出c#中哪个进程启动了我的进程?
我有两个exes A.exe(控制台应用程序)和B.exe(GUI)。 现在A.exe只能由B.exe启动而不是其他任何东西。
欢迎任何想法。
答案 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属性可能不会报告多少 方法由于在期间发生的代码转换而按预期调用 优化
希望这有帮助。