在C程序中调用默认的Windows可执行文件

时间:2012-05-21 10:10:40

标签: c windows winapi

我使用system()函数在我的C代码中调用certmgr.exe。 启动可执行文件后,会出现一个命令promt,显示已成功安装证书。

但我不希望打开命令promt。怎么做??

用C语言调用“exe”的任何其他方法..

谢谢,,,

5 个答案:

答案 0 :(得分:5)

在Windows上执行此操作的最简单方法是调用ShellExecute。通过SW_HIDE以确保没有显示控制台窗口。

您也可以使用CreateProcess,但调用起来有点棘手。使用CREATE_NO_WINDOW标志来禁止控制台窗口。

答案 1 :(得分:4)

我不会使用系统运行任何东西..这就是为什么:http://www.cplusplus.com/forum/articles/11153/

您可以使用ShellExecute来运行应用程序http://msdn.microsoft.com/en-us/library/bb762153(VS.85).aspx通过SW_HIDE,您就完成了。

答案 2 :(得分:3)

无法在后台静默运行cmd.exe。但是,请查找start命令及其关联的/B选项:

  

启动一个单独的窗口来运行指定的程序或命令。

     

START [“title”] [/ D path] [/ I] [/ MIN] [/ MAX] [/ SEPARATE | /共享]         [/ LOW | / NORMAL | / HIGH | / REALTIME | / ABOVENORMAL | /低于一般]         [/ AFFINITY] [/ WAIT] [/ B] [命令/程序]         [参数]

     

[...]       B启动应用程序而不创建新窗口。该                   应用程序已忽略^ C处理。除非申请                   启用^ C处理,^ Break是唯一的中断方式                   申请。

CreateProcess会让你感觉更好。

答案 3 :(得分:2)

WINAPI有一个CreateProcess()函数,可用于运行另一个可执行文件。这个函数有几个参数,可能提供了一种不显示certmgr.exe(来自process creation flags参数)控制台窗口的机制:

  

CREATE_NO_WINDOW   该过程是一个没有控制台窗口的控制台应用程序。因此,未设置应用程序的控制台句柄。

答案 4 :(得分:0)

T.E.D在this link回答了我最终的帮助......

这可能会对将来有所帮助......

其他人提到过使用CreateProcess(可能是为了重定向输出)。发生这种情况的一般原因是您通过“system”运行的程序是一个命令行程序。如果您自己编译,则可以通过将其构建为GUI程序来摆脱控制台窗口。您应该能够通过包含Windows.h并使用WinMain()作为入口点而不是main()来实现此目的