Вы можете использовать DLL-инъекцию для вызова SetCurrentDirectoryпосле того, как процесс уже запущен. Это потребует от вас создания приложения-инжектора, а также DLL для внедрения. Существуют некоторые учебные пособия; вероятно, два лучших из них я нашел:
Для этого вам понадобится приличный опыт программирования на C ++ (и рабочая среда сборки).
Однако это предполагает, что служба просматривает текущий каталог. Другая возможность заключается в том, что он использует %path%. Вы говорите, что он «начинается system32, пробует еще несколько мест и, в конечном итоге, свой собственный каталог», так что мне это кажется более вероятным.
Сравните каталоги, которые вы видите procmonс вашими %path%. Если они одинаковы, рассмотрите возможность изменения пользователя SYSTEM %path%или %path%пользователя, запустившего службу, так, чтобы каталог, который вы хотите найти, был первым.
Однако я считаю, что Фред прав - вы вряд ли увидите какую-либо значительную выгоду в производительности, если не будете делать это очень часто. Простые операции открытия файлов не особенно дороги, особенно если это локальный путь, а файл на самом деле не существует.