我只是知道这很简单,但我已经尝试了我在这个论坛上找到的所有建议,而且我仍然无法获得以下ShellExecute语句,这些语句在XP上运行了四年,在Windows 7中工作。
感激不尽的任何建议!
ShellExecute(Handle, 'open', PChar('command.com'), PChar('/c ftp -s:c:\checkout\WebFTPParams.txt 91.208.99.4'), Nil, SW_SHOW);
ShellExecute(Handle, 'open', PChar('command.com'), PChar('/c ftp -s:c:\checkout\WWFTPParams.txt 212.78.232.39'), Nil, SW_SHOW);
非常感谢,伙计,但我发现了问题。我应该一直在使用CMD.EXE而不是旧的Command.com。很抱歉打扰你!
答案 0 :(得分:8)
Command.com不再是Windows(它在DOS中使用)。使用cmd.exe
答案 1 :(得分:2)
不同版本的Windows使用不同的命令行解释器。旧版本使用 command.com ,较新版本使用 cmd.exe 。使用GetEnvironmentVariable('COMSPEC')
发现要使用的正确解释器。
话虽如此,在这种情况下您不需要使用任何解释器。 ftp.exe 是它自己的应用,因此您可以直接运行它。虽然您可以使用ShellExecute()
来运行exe文件,但实际上并不意味着它。它只会委托给CreateProcess()
,所以你真的应该切断中间人并直接使用CreateProcess()
。
更好的是,您应该考虑直接在自己的代码中使用FTP协议,而不是使用外部进程。有许多第三方组件,如Indy,ICS,Synapse等,以及具有FTP客户端实现的API,如WinInet,libcurl等,并且可以在Delphi中轻松使用。
答案 2 :(得分:1)
如前所述,command.com是DOS / Windows 9x命令解释器。但我认为根本没有理由调用命令解释器。我会这样做:
ShellExecute(Handle, nil, 'ftp.exe', '-s:c:\checkout\WWFTPParams.txt 212.78.232.39', nil, SW_SHOW);
此处也无需指定动词。