Возможно, вы используете неправильную функцию Win32 API. Ваш CreateMutex пытается создать именованный мьютекс "thing.exe ". Если нет такого с таким именем, оно будет успешно выполнено, поэтому, если процесс, который вы пытаетесь проверить, не создает мьютекс с этим именем, вы не получите желаемый результат.
То, что вы хотите - это, вероятно, перечислить все запущенные процессы и посмотреть, есть ли тот, за которым вы работаете. Вы можете сделать это с помощью ToolHelp32 из Win32 API - см. пример здесь . Я не знаю, насколько легко будет преобразовать его в «чистый» NSIS, чтобы вы могли написать плагин DLL или проверить, существует ли уже существующее решение, распространяющееся вокруг сообщества NSIS.