2

私はこれが単純なことだと知っていますが、このフォーラムで見つけることができるすべての提案を試しましたが、XP で 4 年間完全に機能した次の ShellExecute ステートメントを 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);

とにかくありがとう、皆さん、しかし私は問題を見つけました。古き良き Command.com ではなく、CMD.EXE を使用するべきでした。お邪魔になってすみません!

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()直接使用する必要があります。

さらに良いことに、外部プロセスを使用するよりも、独自のコードで FTP プロトコルを直接使用することを検討してください。Indy、ICS、Synapse などのサードパーティ コンポーネントや、WinInet、libcurl などの API が多数あり、FTP クライアントの実装があり、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 に答える