从Win32应用程序运行外部exe

4

我正在使用 Visual Studio 2010 开发一个 WIN32 应用程序。我需要从我的代码中执行一个外部 exe 文件,但不需要显示其窗口。除了执行 exe 文件之外,我还需要向其传递某些参数。以下是我的代码:

char path[] = "D:\\scan\\scan.exe -l";
system(path);
//ShellExecute(hWnd, "open",path, NULL, NULL, SWP_HIDEWINDOW); 

如果我使用system(path)的话,它可以正常执行,但是exe程序窗口也会显示出来,但是如果我使用ShellExecute(hWnd, "open",path, NULL, NULL, SWP_HIDEWINDOW);,那么给定路径的exe程序就不会被执行。请问我该如何解决这个问题,请指导。

2个回答

6

ShellExecute函数需要分别提供程序名称和其参数。请尝试以下方法:

ShellExecute(hWnd, NULL, "D:\\scan\\scan.exe", "-l", NULL, SW_HIDE);

SWP_HIDE -> 你是指 SW_HIDE 吧? - Leo Chapiro
@duDE:错别字已修正,谢谢。 - Jonathan Potter

3
你应该使用不使用 shell 调用程序的 CreateProcess。这也允许你捕获程序输出并检索它可能给出的任何错误代码。
如果需要隐藏GUI应用程序的窗口,可以在 CreateProcess 调用中设置 dwFlags 中的 CREATE_NO_WINDOW (参见此答案)。

你假设这个程序是一个控制台应用程序。 - Jonathan Potter
@Jonathan 看一下修改。没有理由去使用 shell。ShellExecute 对于其他事情很有用(在这里查看其文档 http://msdn.microsoft.com/en-us/library/windows/desktop/bb762153.aspx),但它绝对不是这项工作的正确工具。 - rubenvb
是的,我以前用过 ShellExecute :) - Jonathan Potter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接