2012-05-21 59 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

相關問題