Delphi ShellExecute在Windows 7中不起作用

时间:2013-01-05 10:46:08

标签: delphi windows-7 shellexecute

我只是知道这很简单,但我已经尝试了我在这个论坛上找到的所有建议,而且我仍然无法获得以下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。很抱歉打扰你!

3 个答案:

答案 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);

此处也无需指定动词。