gpt4 book ai didi

c++ - CreateProcess 和命令行参数

转载 作者:可可西里 更新时间:2023-11-01 13:50:52 24 4
gpt4 key购买 nike

背景信息:Windows 7、Visual C++ 2010 Express

问题:CreateProcess() 不断返回“无效的命令行参数”

说明:我正在编写一段使用 Windows API 的 CreateProcess 调用外部程序的代码。到目前为止,我接到了使用一个外部程序的电话:

if( !CreateProcess( "C:\\Temp\\convert.exe",
t_str, // Arguments
...
}
//where t_str is " C:\\img1.jpeg C:\\img1.pgm" (ImageMagick if you're wondering).

即使我为将所有内容推送到 Windows 字符串和指针而进行了大量数据处理,这也能完美运行。因此,我复制了 CreateProcess() 的所有重整以用于对不同外部程序的另一个调用:

 if( !CreateProcess( "C:\\Temp\\sift.exe",
t_str2, // Arguments
...
}
//where t_str2 is ` < C:\\img1.pgm > C:\\img1.key`

基本上,有些东西非常相似,但所有的变量名都改变了(因为我有这两个调用串行运行)。这就是问题所在;这不会运行,而是打印出“无效的命令行参数:< C:\img1.pgm”。当然,这个命令在命令提示符下运行良好,但在我的代码中却不行。

我将 t_str2 切换为其他不太复杂的东西(因为我知道 sift.exe 的工作原理),我得到了相同的结果。当我只运行筛选而不进行转换时,也会发生同样的事情。

问题:是什么导致了这个问题?我可以做些什么来进一步调试这个问题?关于我正在使用的方法的替代方法有什么建议吗?任何帮助表示赞赏。我可以提供更多代码,但它非常简单,不会出错。

最佳答案

您不能将命令行重定向运算符与 CreateProcess() 一起使用直接地。您必须生成一个 cmd.exe 实例并将运算符传递给它,例如:

CreateProcess( "C:\\windows\\system32\\cmd.exe", t_str2, ...))

在哪里t_str2"/C C:\\Temp\\sift.exe < C:\\img1.pgm > C:\\img1.key" . cmd.exe 的实际路径可以通过阅读 %COMSPEC% 来确定。环境变量。

关于c++ - CreateProcess 和命令行参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8649212/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com