大约一个月前,我为自己编写了一个python脚本,用于自动记录正在运行的程序及其其他相关信息,并使用C#程序获取该信息。
我今天下载了一个游戏,当我运行它时,出现了System.ComponentModel.Win32Exception
错误对话框。
我打开Visual Studio进行调试,以获取错误。尝试访问Process.MainModule
时收到错误消息。
当编写该程序时出错时,我在互联网上搜索了答案,并将C#程序设置为64位以访问64位进程,并请求管理员特权以访问以admin身份运行的进程。我能找到的有关MainModule错误的所有问题都与这两个问题有关。
游戏正在使用Easy Anti Cheat,我想这可能会阻止我访问该进程。
我还使用WMI
尝试至少获取文件路径,以便可以从FileVersionInfo.GetVersionInfo
函数中获取一些信息,但wmi也不返回文件路径或命令行。
我在python中使用psutil
来获取命令行,因为如果不使用WMI就无法从C#中获取该信息,所以我尝试从那里获取一些信息,但是在尝试执行的任何操作上它都出错,我什至无法获取文件名,而我可以从C#中获取文件名。
C#代码的相关部分是
int pid; //I get this from command line arguments
Process p;
p = Process.GetProcessById(pid);
var filename = p.MainModule.FileName ?? "";
有没有一种方法可以至少获取exe路径,以便可以在不触发反作弊程序的情况下使用FileVersionInfo并有可能使自己被禁止? 甚至Windows 10任务管理器也不显示命令行(但是当我右键单击游戏并选择打开文件路径时,它会打开文件夹)。
答案 0 :(得分:0)
我找到了a working example in C++并构建了一个可执行文件来获取进程的路径,并使用返回的路径调用FileVersionInfo.GetVersionInfo
来获取我想要的信息。