【问题标题】:C++: How to make a my program open a .exe with optional argsC++:如何让我的程序打开一个带有可选参数的 .exe
【发布时间】:2011-12-01 22:28:36
【问题描述】:

我在使用某个程序时遇到了一些问题。我的目标是让它打开几个带有可选参数的 .exe 文件。例如,如果我想打开一个 pdf,我可以在 cmd 窗口中输入下面的字符串。

// If used in a cmd window it will open up my PDF reader and load MyPDF.pdf file
"c:\Test space\SumatraPDF.exe" "c:\Test space\Sub\MyPDF.pdf"

这是我使用的两次尝试。第一个打开 PDF,但当然不会加载文件。第二个根本行不通。

// Opens the PDF in my program
system("\"C:\\Test space\\SumatraPDF.exe\"");

// Error I get inside of a cmd window is the comment below
// 'C:\Test' is not recognized as an internal or external command, operable program or batch file.
//system("\"C:\\Test space\\SumatraPDF.exe\" \"C:\\Test space\\Sub\\MyPDF.pdf\"");

我不确定第二个不起作用的原因。可能是我对系统有误解,或者我没有正确使用分隔符。

我觉得那里有一个为此设计的库,而不是创建一个使用这么多分隔符的长字符串。

感谢您的帮助。

【问题讨论】:

标签: c++ windows system


【解决方案1】:

欢迎来到 Stack Overflow!

系统方法通过将它的参数传递给 cmd /c 来工作。因此,您将需要一组额外的引号。请参阅 sled 发布的 related question

作为系统的替代方案,请查看ShellExecuteShellExecuteEx Win32 API 函数。它有更多的功能,虽然它不那么便携。

// ShellExecute needs COM to be initialized
CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE);

SHELLEXECUTEINFO sei = {0};
sei.cbSize = sizeof(sei);
sei.lpFile = prog;   // program like c:\Windows\System32\notepad.exe
sei.lpParameters = args;  // program arguments like c:\temp\foo.txt
sei.nShow = SW_NORMAL;  // app should be visible and not maximized or minimized

ShellExecuteEx(&sei);  // launch program

CoUninitialize();

更多信息here

【讨论】:

  • cmd /c,而不是 cmd /k。 /k 选项在执行指定的命令后使 shell 保持打开状态。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-04
  • 1970-01-01
  • 2023-01-27
  • 2011-05-04
  • 1970-01-01
  • 1970-01-01
  • 2017-10-21
相关资源
最近更新 更多