2

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

4

3 回答 3

8

Command.com 不再在 Windows 中(它在 DOS 中使用)。使用 cmd.exe

于 2013-01-05T10:48:15.013 回答
2

不同版本的 Windows 使用不同的命令行解释器。旧版本使用command.com,新版本使用cmd.exe。用于GetEnvironmentVariable('COMSPEC')发现要使用的正确解释器。

话虽如此,在这种情况下您不需要使用任何解释器。 ftp.exe是它自己的应用程序,因此您可以直接运行它。尽管您可以使用ShellExecute()它来运行 exe 文件,但它确实不是为了那个。它只会委托给CreateProcess(),所以你真的应该去掉中间人并CreateProcess()直接使用。

Even better, rather than use an external process, you should consider using the FTP protocol directly in your own code. There are plenty of third-party components, like Indy, ICS, Synapse, etc, and APIs, like WinInet, libcurl, etc, that have FTP client implementations, and are easily usable in Delphi.

于 2013-01-05T19:05:22.300 回答
1

如前所述,command.com 是 DOS/Windows 9x 命令解释器。但我认为根本没有理由调用命令解释器。我会这样做:

ShellExecute(Handle, nil, 'ftp.exe', '-s:c:\checkout\WWFTPParams.txt 212.78.232.39', nil, SW_SHOW);

这里也不需要指定动词。

于 2013-01-05T11:22:57.293 回答