我想寫一個非常簡單的程序來替換現有的可執行文件。它應該輕微地談論它的論點,並用新的論證來執行原始程序。它應該由第三方庫自動和默默調用。如何隱藏子流程的控制檯窗口?
它運行良好,但它會彈出一個控制檯窗口來顯示被調用程序的輸出。我需要那個控制檯窗口不在那裏。我不關心程序的輸出。
我最初的嘗試是設立一個控制檯應用程序,所以我想我可以通過編寫一個新的Windows GUI應用程序,做同樣的事情解決這個問題。但它仍然彈出控制檯。我假設原來的命令被標記爲控制檯應用程序,所以Windows自動給它一個控制檯窗口來運行。爲了防萬一,我還嘗試用system()調用替換原來的_exec()調用。沒有幫助。
有誰知道我怎樣才能使這個控制檯窗口會消失嗎?
這裏是我的代碼:
int APIENTRY _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
char* lpCmdLine,
int nCmdShow)
{
char *argString, *executable;
// argString and executable are retrieved here
std::vector<std::string> newArgs;
// newArgs gets set up with the intended arguments here
char const ** newArgsP = new char const*[newArgs.size() + 1];
for (unsigned int i = 0; i < newArgs.size(); ++i)
{
newArgsP[i] = newArgs[i].c_str();
}
newArgsP[newArgs.size()] = NULL;
int rv = _execv(executable, newArgsP);
if (rv)
{
return -1;
}
}
這就是我已經試過的,這就是我的意思是「非控制檯應用程序」。它似乎仍然彈出調用應用程序的控制檯窗口。 – 2009-12-21 11:30:23
對不起,我誤讀了。如果你使用exec(),它絕對不應該彈出aconsole - 看到這個答案稍有不同的問題http://stackoverflow.com/questions/597818/gcc-c-how-to-hide-console-window – 2009-12-21 11:33:03
但是這不是我所看到的。如果我用這個替換我的調用exec: newArgsP = new char const * [2]; newArgsP [0] =「hello.txt」; newArgsP [1] = NULL; _execv(「c:\\ WINDOWS \\ system32 \\ write.exe」,newArgsP); ...然後wordpad正確地出現沒有控制檯窗口。但是如果我讓它執行它應該的應用程序,那麼就會有一個帶有程序標準輸出的控制檯。所以我相信這與被調用的程序有關,而不是我的程序。 – 2009-12-21 12:07:18