我的C Win32应用程序应该允许传递完整的命令行来启动另一个程序,例如:
myapp.exe /foo /bar "C:\Program Files\Some\App.exe" arg1 "arg 2"
myapp.exe
可能看起来像这样
int main(int argc, char**argv)
{
int i;
for (i=1; i<argc; ++i) {
if (!strcmp(argv[i], "/foo") {
// handle /foo
} else if (!strcmp(argv[i], "/bar") {
// handle /bar
} else {
// not an option => start of a child command line
break;
}
}
// run the command
STARTUPINFO si;
PROCESS_INFORMATION pi;
// customize the above...
// I want this, but there is no such API! :(
CreateProcessFromArgv(argv+i, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
// use startup info si for some operations on a process
// ...
}
我可以想到一些解决方法:
- 使用
GetCommandLine()
函数并找到与argv[i]相对应的子字符串 - 编写类似于
ArgvToCommandLine()
的代码,该函数也在另一个SO问题中提到
这两种方法都很冗长,并且需要重新实现繁琐的Windows命令行解析逻辑,而这些逻辑已经是CommandLineToArgvW()
函数的一部分。
是否有“标准”的解决方案来解决我的问题?标准(Win32、CRT等)的解决方案实现也算作一种解决方案。
strstr()
的部分存在问题。这个用例怎么样:myapp.exe /SetTitle C:\app.exe /RunMinimized C:\app.exe /ArgToApp.exe
。实际命令从第二个匹配项开始。 - Ilia K.