procedure TForm1.Button1Click(Sender: TObject);
var
iProc: IProcess;
x: integer;
begin
iProc := Process('explorer.exe');
for x := 0 to iProc.Modules.ItemCount - 1 do
ShowMessage(iProc.Modules[x].FileName);
end;
The reason why the code in the original question doesn't work is that IModules.FileName is only meant to work if all modules in the container share the same file name, which is obviously not the case here.