Я не уверен, что это вопрос будет в нужной теме, простите меня, если что =). Я пишу программу для Windows в которой мне надо выполнять некоторые вызовы через коммандную строку.
Проблема проста:
Если я, из программы, порождаю консоль и пытаюсь выполнить
- Код: Выделить всё
cmd /k pnputil
"pnputil" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.
Программа и консоль выполняются от сис.админа. Я побродил в консоли(которую я вызвал программно) перешёл в папку C:/Windows/System32 и руками попытался вызвать pnputil.exe(он там лежит) я получил то же самое. Т.е. мне говорят, что файла нет!!??
Замечу, что к примеру команда ping в порождённой консоли работает, а нужная мне команда pnputil нет.
Естественно всё работает(утилита находиться и исполняется), если я просто(руками, НЕ из программы) вызываю консоль.
Вызов консоли я делал через TProcess, CreateProcess и ShellExecuteExW (пробовал разными способами)
У меня 32 битный лазарус на win10(64).
lazarus ver. 1.6.2 fpc 3.0.0
Вот к примеру вырезка кода вызова на TProcess:
- Код: Выделить всё
procedure TForm1.processexecute(exepath,params: string);
var Process: TProcess;
begin
Process := TProcess.Create(nil);
try
Process.Executable := exepath;
Process.Parameters.Add(params);
Process.Options := Process.Options + [poWaitOnExit];
Process.Execute;
finally
Process.Free;
end;
end;
processexecute('c:\Windows\System32\cmd.exe','/k pnputil');
Я почитал, если в виндовс создаются процессы им можно присваиваются какие-то секьюрити_токены. Не знаю уже что делать.
Права я проверил,хотя мне бы сказали, что "не хватает прав".
Помогите, подскажите куда копать, вдруг кто сталкивался с такой проблемой