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