首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

Delphi中调用命令行程序的有关问题

2012-06-03 
Delphi中调用命令行程序的问题我的命令行代码如下:mkisofs -r -dvd-video G:\video|cdrecord -v -eject de

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命令,参考如下代码:

Delphi(Pascal) code
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; 

热点排行