📜  c# 获取进程文件位置 - C# (1)

📅  最后修改于: 2023-12-03 14:59:43.562000             🧑  作者: Mango

C#获取进程文件位置

在C#中,我们可以通过Process类来获取进程的相关信息,包括进程的文件位置。本文将介绍如何使用C#获取进程文件位置的方法。

获取进程对象

首先,我们需要获取要获取文件位置的进程对象。可以通过以下代码获取当前进程对象:

Process currentProcess = Process.GetCurrentProcess();

也可以通过进程ID获取指定进程对象,例如:

int processId = 1234; // 指定进程的ID
Process targetProcess = Process.GetProcessById(processId);
获取进程文件位置

获取进程文件位置有多种方法,这里列举其中两种。

方法一:使用Process.MainModule.FileName

Process类的MainModule属性返回一个ProcessModule对象,该对象表示进程的主模块。ProcessModule对象有FileName属性,表示模块文件的完整路径。因此,我们可以使用以下代码来获取进程文件位置:

string filePath = currentProcess.MainModule.FileName; // 获取当前进程文件位置

当然,也可以通过指定进程对象的方式来获取指定进程文件位置。

string filePath = targetProcess.MainModule.FileName; // 获取指定进程文件位置
方法二:使用GetProcessImageFileName函数

另一个获取进程文件位置的方法是使用Windows API函数GetProcessImageFileName。该函数需要一个进程句柄作为参数,返回进程可执行文件的路径。在C#中,我们可以使用Process类的Handle属性获取进程句柄。使用该函数的代码如下:

[DllImport("kernel32.dll")]
static extern uint GetProcessImageFileName(IntPtr hProcess, [Out] StringBuilder lpImageFileName, [In] [MarshalAs(UnmanagedType.U4)] int nSize);

Process currentProcess = Process.GetCurrentProcess();
IntPtr handle = currentProcess.Handle;
StringBuilder builder = new StringBuilder(1024);
uint length = GetProcessImageFileName(handle, builder, builder.Capacity);
string filePath = builder.ToString(0, (int)length);

同样地,也可以通过指定进程对象的方式来获取指定进程文件位置。

总结

本文介绍了C#中获取进程文件位置的两种方法。其中,第一种方法使用Process.MainModule.FileName属性直接获取进程可执行文件的路径,简单明了;第二种方法则使用Windows API函数GetProcessImageFileName,需要进行P/Invoke操作,稍微麻烦一些,但也很实用。