Скорее всего, ваша программа не работает с достаточными правами для получения информации о других процессах.
Только при выполнении от имени SYSTEM вы получите каждое имя процесса, но для других вы можете запросить, чтобы ваше приложение выполнялось с правами администратора (обычно путем указания уровня UAC в манифесте приложений) (вам также может потребоваться включить SeDebugPrivilege в процессе доступа к токену), и это должно позволить вам увидеть большинство из них.
Кроме того, обращение к нативному API сделало бы вещи более понятными, поскольку для выполнения именно этих задач уже используется множество примеров кода.
EDIT ::
GetModuleFileName предназначен только для использования на модулях процесса (т.е. DLL), и даже тогда они должны быть загружены текущим процессом. Что вы ищете:
GetProcessImageFileName
Пока вы можете открыть дескриптор процесса с требуемым доступом, он должен работать. Вот ссылка на документацию msdn для GetProcessImageFileName: http://msdn.microsoft.com/en-us/library/windows/desktop/ms683217%28v=vs.85%29.aspx
Обратите внимание, что ProcessExplorer загружает драйвер и, таким образом, имеет полный доступ к системе, следовательно, он может найти практически все. TaskManager использует несколько печально известных API для получения данных. Они слишком много, чтобы попасть сюда, хотя.