C# 通过反射机制动态获取 exe 中的变量信息

笑对人生 2018-07-27 10:39:23
有一个用C#写的exe程序A正在循环运行, 我想写一个程序动态获取A程序的某个变量值(假设 A程序在随时修改这个变量), 目前的情况是,我可以获取到A程序的方法并调用 (改方法用于返回变量),但得到的都是变量静态的值。 不能得到修改后的值。我如何通过反射机制得到修改后的值 呢?
...全文
621 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
dugupiaoyun 2018-08-01
  • 打赏
  • 举报
回复
copydata进程间通信吧
twtyypmb123 2018-07-31
  • 打赏
  • 举报
回复
如果是程序A已经运行起来了,其他程序去获取A程序里面的值,用反射是获取不到的,你需要用win32api的ReadProcessMemory方法,来获取其他进程中内存的值,这是一个繁琐的过程,楼主确定这是唯一的方式?
游北亮 2018-07-27
  • 打赏
  • 举报
回复
复杂一点走RPC通讯方案。
最简单的就是通过MQ、Redis或数据库等中间件 进行数据传递
笑对人生 2018-07-27
  • 打赏
  • 举报
回复
引用 3 楼 youbl 的回复:
A和B是不同的2个进程?
那么不能,反射只能获取当前进程里的信息。
不同进程的数据只能走其它Windows API方案


A和B是两个单独的程序,也就是两个进程, 如果不行的话,有什么更好的方法吗?
游北亮 2018-07-27
  • 打赏
  • 举报
回复
A和B是不同的2个进程?
那么不能,反射只能获取当前进程里的信息。
不同进程的数据只能走其它Windows API方案
笑对人生 2018-07-27
  • 打赏
  • 举报
回复 1
补充说明 , 举个例子, 假设A程序有下面的一个方法, 其中的变量num在随时更改, A程序调用改方法获得变量num的值, 我能动态获取到变量num的值 吗?

  
//A程序
public int GetNum()
{
return num;
}
//B程序
Assembly assembly = Assembly.LoadFile("D:\\FlightData\\FlightData\\bin\\Debug\\FlightData.exe"); // 加载程序集(EXE 或 DLL)
Type t = assembly.GetType("FlightData.ProcessData"); //参数必须是类的全名
object o = Activator.CreateInstance(t);
MethodInfo mi = t.GetMethod("GetNum");
object a = mi.Invoke(o, null);

  • 打赏
  • 举报
回复
不能,不过金山游侠这样的内存修改工具搜索两次管你静态动态的变量都能找到。

111,096

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧