Delphi中调用命令行程序的问题
我的命令行代码如下:
mkisofs -r -dvd-video G:\video|cdrecord -v -eject dev=1,0,0 -tsize 1985616s -dao -data -
在DOS下执行完全正常,在DELPHI中分别去执行mkisofs和cdrecord也都可以,
不知道是什么原因,整段命令行在DELPHI中却无法执行,总是提示:No such file or directory. Invalid node - 'G:\video|cdrecord'.
这是什么原因呢?会不会是因为DELPHI中的‘|’和DOS下的‘|’不一样????
肯请高手解答,先谢谢!
[解决办法]
路径打上双引号
或者分两条命令来行.
[解决办法]
把你的命令做成批处理,然后执行批处理文件
[解决办法]
呵呵,,,看看,,不知。。。学习下。。。
[解决办法]
执行多条DOS命令,参考如下代码:
function ExecCommands(commands: array of string): string;var vSecurityAttributes: TSecurityAttributes; vReadPipe, vWriteFile, vWritePipe, vReadFile: THandle; vStartupInfo: TStartupInfo; vProcessInfo: TProcessInformation; I: Integer; vBuffer: array[0..4096] of char; vSize: Longword;begin Result := ''; FillChar(vSecurityAttributes, SizeOf(TSecurityAttributes), 0); vSecurityAttributes.nLength := SizeOf(TSecurityAttributes); vSecurityAttributes.bInheritHandle := True; vSecurityAttributes.lpSecurityDescriptor := nil; CreatePipe(vReadPipe, vWriteFile, @vSecurityAttributes, 0); CreatePipe(vReadFile, vWritePipe, @vSecurityAttributes, 0); FillChar(vStartupInfo,Sizeof(StartupInfo), #0); vStartupInfo.cb := Sizeof(StartupInfo); vStartupInfo.dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES; vStartupInfo.wShowWindow := SW_HIDE; vStartupInfo.hStdInput := vReadPipe; vStartupInfo.hStdOutput := vWritePipe; vStartupInfo.hStdError := vWritePipe; if not CreateProcess(nil, 'cmd.exe', @vSecurityAttributes, @vSecurityAttributes, True, NORMAL_PRIORITY_CLASS, nil, nil, vStartupInfo, vProcessInfo) then Exit; for I := Low(commands) to High(commands) do begin WriteFile(vWriteFile, PChar(commands[I])^, Length(commands[I]), vSize, nil); WriteFile(vWriteFile, #13#10, 2, vSize, nil); end; WriteFile(vWriteFile, 'exit'#13#10#0, 7, vSize, nil); WaitforSingleObject(vProcessInfo.hProcess, INFINITE); repeat ReadFile(vReadFile, vBuffer, SizeOf(vBuffer), vSize, nil); Result := Result + Copy(vBuffer, 1, vSize); until vSize < SizeOf(vBuffer); CloseHandle(vProcessInfo.hProcess); CloseHandle(vProcessInfo.hThread); CloseHandle(vReadFile); CloseHandle(vWriteFile); CloseHandle(vReadPipe); CloseHandle(vWritePipe);end;procedure TForm1.Button1Click(Sender: TObject);begin Memo1.Text := ExecCommands(['cd c:\', 'c:', 'dir']);end;