在C#中如何获得调用者的信息?
我需要知道我的可执行程序(exe)是如何被调用的。比如:在资源管理器中被双击、在命令行或批处理中执行、或者被其他程序调用等。请注意:不是指程序内的过程被谁调用,而是整个e...
我需要知道我的可执行程序(exe)是如何被调用的。
比如:在资源管理器中被双击、在命令行或批处理中执行、或者被其他程序调用等。
请注意:不是指程序内的过程被谁调用,而是整个exe被谁调用。
我了解了关于命令行的内容,发现最多只能获取到自身的信息,不行。
请高人指点,或者请同好指引思路。谢谢。 展开
比如:在资源管理器中被双击、在命令行或批处理中执行、或者被其他程序调用等。
请注意:不是指程序内的过程被谁调用,而是整个exe被谁调用。
我了解了关于命令行的内容,发现最多只能获取到自身的信息,不行。
请高人指点,或者请同好指引思路。谢谢。 展开
2个回答
展开全部
C#获取当前进程的父级进程
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
namespace ConsoleApplication1
{
public static class ProcessExtensions
{
private static string FindIndexedProcessName(int pid)
{
var processName = Process.GetProcessById(pid).ProcessName;
var processesByName = Process.GetProcessesByName(processName);
string processIndexdName = null;
for (var index = 0; index < processesByName.Length; index++)
{
processIndexdName = index == 0 ? processName : processName + "#" + index;
var processId = new PerformanceCounter("Process", "ID Process", processIndexdName);
if ((int)processId.NextValue() == pid)
{
return processIndexdName;
}
}
return processIndexdName;
}
private static Process FindPidFromIndexedProcessName(string indexedProcessName)
{
var parentId = new PerformanceCounter("Process", "Creating Process ID", indexedProcessName);
return Process.GetProcessById((int)parentId.NextValue());
}
public static Process Parent(this Process process)
{
return FindPidFromIndexedProcessName(FindIndexedProcessName(process.Id));
}
}
class Program
{
static void Main(string[] args)
{//测试
Console.WriteLine(Process.GetCurrentProcess().Parent().ProcessName);
}
}
}
追问
用性能计数器的办法真是太棒了! 非常感谢!
我修改了返回的那一行,直接返回 Process 的 MainModule.FileName,达到了我的目标。
嗯,貌似过程中还有可精简优化的地方,我再想一想。
给你追加100分,采纳啦~
展开全部
你已经写出来了,只要略加判断就是了 trace.GetFrame(1).GetMethod(); 这个括号里面的参数从0开始,0就是自己,1就是上一个,2就是上上一个3就是上上上一个 如果再上面没有了的话,就会返回一个异常字符串,你判断这个异常字符串是什么,就停止循环就好了 只要循环,不需要递归。
追问
可能是我没有表达清楚。请看问题正文中的“请注意”部分。
我需要的 不是 不是 不是 程序内的过程调用堆栈。
不是 StackTrace对象 或者 Environment.StackTrace 方法。
它们只能给出程序内的调用关系,不能告诉我是谁启动了这个 exe 文件。
还是 谢谢 回答。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询