Убедитесь, что вы используете полный, абсолютный путь при вызове CreateProcess
, поскольку рабочий каталог, когда служба запущена, может не соответствовать вашим ожиданиям (я делал эту ошибку чаще, чем хотел бы признаться).
Посмотрите, изменится ли поведение, если вы замените командный файл чем-то простым, например:
@echo TESTING >C:\batch_debug.txt
Это должно дать более четкое представление о том, не выполняется ли пакетный файл вообще или что-то в пакетном файле вызывает проблему.
Какое возвращаемое значение вы получаете от CreateProcess
? Если это не помогло, GetLastError
даст вам полезную информацию?
UPDATE:
Я думаю, что проблема в том, что CreateProcess
ограничен исполняемыми файлами. Вы можете запустить командный файл, но вы должны передать его в качестве параметра cmd.exe
. Вы также должны перечислить параметры отдельно от имени исполняемого файла. Например, если команда cmd.exe /c C:\my_batch.bat
обычно запускает ваш командный файл в новом экземпляре интерпретатора команд, следующий вызов CreateProcess
должен сделать то же самое:
CreateProcess("cmd.exe", "/c C:\\my_batch.bat", ...);