【发布时间】:2013-01-29 01:54:34
【问题描述】:
我正在为 Windows 编写一个程序,该程序最终必须启动位于同一台计算机上的不同的预先存在的 .exe。它将多个参数传递给这个 .exe 文件。我正在阅读实际的命令和参数并构建命令,但我也尝试用相同的结果对其进行硬编码。这是硬编码的版本(我是从一个使用相同.exe 的旧 C 程序中挑选出来的):
system("c://IQapture//dmon2_6_IHD -p2 c://IQapture//mon_table_101_Tx8.txt 11 0 0");
所以在原程序里面int _cdecl main(int argc, char**argv)这个使用系统是可行的。在我的 C++ 类方法中的 C++ 程序中,当我发出命令时,正确的程序会启动,但它会立即弹出一个错误对话框,指出发生了错误。我将用于启动 exe 的系统字符串回显到控制台。在它失败后,我复制并粘贴了与 echo'd 相同的行,这次 exe 运行没有错误。这是可重复的。如果与时间有关,我尝试在发出系统命令之前添加 10 秒延迟,但这没关系。加上原来的旧程序不需要延迟。这对我来说意味着字符串是正确的并且目标程序可以工作。不知何故,system() 调用与直接命令行调用不同。该程序编译并构建良好。我正在使用 Visual Studio 2010。
是否有人对如何使 system() 调用像命令行调用一样工作有想法?
【问题讨论】:
-
为什么所有这些正斜杠?另外,你确定你是从同一个目录运行命令吗?
-
IIRC,
system(x)运行cmd.exe /c x所以试着把它放在命令行中。还要检查当前目录和环境变量是否相同,尤其是PATH。 -
这个例子是我从一个使用这个有效的 exe 的旧程序中复制和粘贴的。我不知道为什么它使用两个正斜杠,但它有效。我的程序中没有执行“cd”或任何类似更改目录的操作,因此我的 .exe 所在的目录应该是默认目录。
-
@Harry - 所以只需发出 system("pwd")、system("Path") 和 system("env")?我应该指出,具有所有必需硬件的目标系统不在这里。我只有在现场才能尝试,所以我提出了额外的问题,而不是仅仅尝试。
-
嗯,
cd和set而不是pwd和env,但基本上,是的。发出system("cmd.exe")来启动命令shell,然后尝试从该shell 手动运行程序,并检查您是否在预期的目录中以及环境是否符合预期,这可能会更简单。
标签: c++ windows command-line