2012-05-21 66 views
5

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

但我不想命令promt被打开。怎么做??

可调用“exe文件的” C语言中的任何其他方式..

谢谢,,,

+0

感谢所有你的回复...... Upvoted all ... – 2vision2

+0

ShellExecute(NULL,NULL,“ 。\\ certifications \\ CertMgr.exe“,”/ add。\\ certifications \\ MYcertificate.cer/s/r localMachine root“,NULL,SW_HIDE)我使用上面的命令,然后点击我的exe文件时打开一个控制台窗口.... – 2vision2

回答

5

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

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

+0

ShellExecute(NULL,NULL,“。\\ certifications \\ CertMgr.exe”,“/ add。\\ certifications \\ MYcertificate.cer/s/r localMachine root”,NULL,SW_HIDE)我使用上面的命令,仍然会打开一个控制台窗口,点击我的exe文件.... – 2vision2

+0

CreateProcess和CREATE_NO_WINDOW标志有什么关系。有时候这是唯一的解决方案。 –

+0

雅我尝试与createProcess也再次获得控制台窗口.. CreateProcess(“。\\ certifications \\ CertMgr.exe”,“/添加。\\认证\\ MYcertificate.cer/s/r localMachine根”,NULL ,NULL,FALSE,CREATE_NO_WINDOW,NULL,NULL,&si,&pi); – 2vision2

3

没有办法运行cmd.exe默默地/背景。但是,不要抬头看start命令及其相关/B选项:

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

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

[...] 乙开始应用而无需创建一个新的窗口。 应用程序已忽略^ C处理。除非应用程序 启用^ C处理,否则^ Break是中断 应用程序的唯一方法。

你会比较好用CreateProcess

2

WINAPI具有CreateProcess()函数,您可以使用它来运行其他可执行文件。有几个参数到这个函数提供一种机制,用于不显示的certmgr.exe控制台窗口(从process creation flags参数):

CREATE_NO_WINDOW 的处理是正在运行控制台应用程序没有控制台窗口。因此,应用程序的控制台句柄未设置。

0

通过T.E.D在this link回答让我终于......

这可能会帮助一些之一的未来......

其他人使用的CreateProcess提到的(大概是为了重定向输出)。发生这种情况的一般原因是您通过“系统”运行的程序是一个命令行程序。如果它是自己编译的东西,那么可以通过将其构建为GUI程序来摆脱控制台窗口。你应该能够通过包含Windows.h并使用WinMain()作为你的入口点来代替main()

+0

am使用mingw作为编译器和shell执行仍然打开一个控制台与主要作为起点。我将其更改为WinMain()并使用-mwindows开关进行编译。 – 2vision2

相关问题