Если пользователей не много, можно использовать taskscheduler, пропиши для каждого пользователя свою задачу запуска твоего приложения (без условия), в каждой пропиши соответствующего пользователя. В задаче есть опции - следить чтобы приложение было запущено только один раз, автоперезапуск и т.п.
В этом случае пользователям в ярлыке запуска укажи не само приложение а команду запуска задачи
schtasks run
Иначе, запилить скрипт на powershell/windows scripting/любимый язык программирования, который будет при запуске приложения сохранять его pid, сохранять его в файле (имя файла должно содержать имя текущего пользователя, тогда каждому пользователю будет разрешен запуск только 1 экземпляра) и сравнивать его при следующем запуске с уже запущенным.
Можно использовать linux way, найти/собрать утилиту flock или ее аналог, она создает файл с указанным именем и блокирует его, если удачно, запускает указанную команду иначе нет, по завершению файл раблокируется, в некоторых случаях это подходит
Само собой если пользователь прошареный, он сможет это обойти и запустить приложение в обход твоего ярлыка