wget for windows在使用createprocess()调用时忽略选项

问题描述 投票:0回答:1

我正在尝试使用c ++程序中的wget for windows从网站下载6个文件,并将结果连接成一个文件。这不是批处理文件的问题。该命令只是:

wget -O bits.bin --wait=20 --random-wait --user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:65.0) Gecko/20100101 Firefox/65.0" "http://url/to/the/file1" "http://url/to/the/file2" "http://url/to/the/file3" "http://url/to/the/file4" "http://url/to/the/file5" "http://url/to/the/file6"

从.bat文件执行时,这会经过测试并按预期工作。使用--output-file =而不是-O也可以从批处理文件中使用。

但是当我尝试用CreateProcessA()调用wget时,那些第一个选项被解释为URL。 wget尝试下载bits.bin,例如作为ftp地址。它最终忽略了这些荒谬的URL,只是下载并存储了6个单独的文件,如[URL1],[URL2] .1,[URL3] .2等,其中包含长丑陋的url-as-names。

我想也许CreateProcess向被调用程序提供params的方式与windows的wget期望它们的方式不兼容,但我真的不明白为什么应该有任何区别。

请注意,参数字符串长度大约为900个字符,因为6个URL很长。所以这有点限制了我的选择。我无法显示实际的URL,因为它们包含密码和其他个人数据。

我已经尝试在param字符串的不同部分添加引号而没有运气。如果有什么事情似乎会让事情变得更糟。我使用sprintf,因为在实际代码中我必须在运行时将passkey和其他选项插入到每个URL中。

现在,除非有人在这里有解决方案,否则我放弃使用CreateProcess()来运行wget。接下来我将尝试ShellExecute()然后如果需要System()。想知道MAXPATH是否可能成为一个问题。我可能不得不拨打wget 6次而不是一次,并自己管理随机延迟。我刚尝试过:

ShellExecuteA(NULL, NULL,"wget.exe", params, NULL, SW_SHOW);

它弹出一个确认对话框,当我允许它运行时,wget似乎并没有真正做任何事情。也许System()将是我唯一的选择。

注意:CreateProcess()现在正在工作,我也在第二个参数中包含了wget.exe。多谢你们。很奇怪ShellExecute似乎根本不起作用,但我想这没关系。也许这是一些像MAX_PATH限制的实现细节。

我知道我可以将CreateProcess中的第一个参数设置为NULL并在第二个CreateProcess()参数中包含程序名称,但我也会引入潜在的MAX_PATH问题。虽然我认为这并不比ShellExecute()差。我希望利用创建过程参数的慷慨32768 char限制。

char params[1024];
sprintf(params,"--output-file=bits.new --wait=20 --random-wait --user-agent=\"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:65.0) Gecko/20100101 Firefox/65.0\" \"url/to/file1\" \"url/to/file2\" \"url/to/file3\"");
STARTUPINFOA startstruct = {0};
startstruct.cb = sizeof(startstruct);
PROCESS_INFORMATION procinfo;
CreateProcessA("wget.exe",params,0,0,0,CREATE_NEW_CONSOLE,0,0,&startstruct, &procinfo);
c++ c windows wget createprocess
1个回答
1
投票

我使用CreateProcess()通过发送可执行文件名作为第一个参数,在第二个参数中使用进程的名称加上其他参数如

sprintf(params,"wget.exe --output-file=bits.new --wait=60 --random-wait --user-agent=\"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:65.0) Gecko/20100101 Firefox/65.0\" \"url/to/file1\" \"url/to/file2\" \"url/to/file3\"");
© www.soinside.com 2019 - 2024. All rights reserved.