要如何 terminate CreateProcess(NULL,"cmd.exe -C ping 127.0.0.1",...) |
答題得分者是:gac
|
berlin
一般會員 發表:2 回覆:5 積分:1 註冊:2007-04-24 發送簡訊給我 |
各位大大, 我用CreateProcess 啟動了一個ping 的process, 如下:
CreateProcess(NULL, "cmd.exe -C ping 127.0.0.1 -t", NULL, NULL, TRUE, NORMAL_PRIORITY_CLASS, NULL, aPath.c_str(), &StartupInfo, &ProcessInfo) 然後想要用 TerminateProcess(ProcessInfo.hProcess, 0) 來結束它, 可是卻無法成功. 我看了TerminateProcess 的用法, 應該沒錯阿, 問題出在那兒呢? 有誰可以指點我一下呢? 感激不盡. |
gac
初階會員 發表:2 回覆:28 積分:26 註冊:2004-08-16 發送簡訊給我 |
<textarea class="cpp" rows="10" cols="60" name="code">
STARTUPINFO g_StartupInfo;
PROCESS_INFORMATION g_ProcessInformation; void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
CreateProcess(NULL, "calc", NULL, NULL,
TRUE, NORMAL_PRIORITY_CLASS, NULL, NULL,
&g_StartupInfo, &g_ProcessInformation);
} void __fastcall TForm1::BitBtn2Click(TObject *Sender)
{
TerminateProcess(g_ProcessInformation.hProcess, 0);
}
</textarea> 不知道您的程式是怎麼做的,我用上面的程式測試過,可以正常動作~~~
------
我..........還很嫩! |
berlin
一般會員 發表:2 回覆:5 積分:1 註冊:2007-04-24 發送簡訊給我 |
如果我create 的process 是 "notepad.exe" 之類的就可以terminate 掉,
CreateProcess(NULL, "notepad.exe", NULL, NULL, TRUE, NORMAL_PRIORITY_CLASS, NULL, aPath.c_str(), &StartupInfo, &ProcessInfo) ------> 可以terminate 但如果是 "cmd.exe -C mydos.exe" 就無法terminate 掉. CreateProcess(NULL, "cmd.exe -C ping 127.0.0.1 -t", NULL, NULL, TRUE, NORMAL_PRIORITY_CLASS, NULL, aPath.c_str(), &StartupInfo, &ProcessInfo) ------> 無法terminate 不知道為什麼? 我是新手. |
gac
初階會員 發表:2 回覆:28 積分:26 註冊:2004-08-16 發送簡訊給我 |
<textarea class="cpp" rows="10" cols="60" name="code">
STARTUPINFO g_StartupInfo;
PROCESS_INFORMATION g_ProcessInformation; void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
CreateProcess(NULL, "ping 127.0.0.1 -t", NULL, NULL,
TRUE, NORMAL_PRIORITY_CLASS, NULL, NULL,
&g_StartupInfo, &g_ProcessInformation);
}
//--------------------------------------------------------------------------- void __fastcall TForm1::BitBtn2Click(TObject *Sender)
{
TerminateProcess(g_ProcessInformation.hProcess, 0);
CloseHandle(g_ProcessInformation.hProcess);
}
</textarea> 我試了上面的CODE,一樣是正常可以關閉的,
CreateProcess() 的 dwCreationFlags 參數有幾個跟DOS有關的旗標可以設定,
你可以再試試看。
------
我..........還很嫩! |
berlin
一般會員 發表:2 回覆:5 積分:1 註冊:2007-04-24 發送簡訊給我 |
我試了,
CreateProcess(NULL, "ping 127.0.0.1 -t", NULL, NULL, TRUE, NORMAL_PRIORITY_CLASS, NULL, aPath.c_str(), &StartupInfo, &ProcessInfo) ------> 可以terminate CreateProcess(NULL, "cmd.exe -C ping 127.0.0.1 -t", NULL, NULL, TRUE, NORMAL_PRIORITY_CLASS, NULL, aPath.c_str(), &StartupInfo, &ProcessInfo) ------> 無法terminate 我要找出的問題應該是 "cmd.exe -C ping 127.0.0.1 -t" 跟 "ping 127.0.0.1 -t" 在CreateProcess() 中, 差別在哪? 因為我有一個DOS的程式, 必須要用 "cmd.exe -C MyDosApp.exe" 才可以CreateProcess() 成功, 用"MyDosApp.exe" 無法CreateProcess() 成功. 然後就遇到無法 terminate process 的問題了. 謝謝你肯回覆我的問題. |
gac
初階會員 發表:2 回覆:28 積分:26 註冊:2004-08-16 發送簡訊給我 |
我想我知道問題出在哪了,
CreateProcess(NULL, "ping 127.0.0.1 -t", NULL, NULL, TRUE, NORMAL_PRIORITY_CLASS, NULL, aPath.c_str(), &StartupInfo, &ProcessInfo); 是針對 ping 這支程式所建出來的 process, 所以 TerminateProcess() 是把 ping 停掉, 然後 cmd 的視窗是自行結束的 CreateProcess(NULL, "cmd.exe -C ping 127.0.0.1 -t", NULL, NULL, TRUE, NORMAL_PRIORITY_CLASS, NULL, aPath.c_str(), &StartupInfo, &ProcessInfo); 而這樣寫則是建出執行 cmd 的 process, 執行 TerminateProcess() 時,雖然執行回傳值為 true, 但是 cmd 內部還有程式在跑,所以沒辦法關掉 不曉得你的 "MyDosApp.exe" 是什麼程式, 不過一般 console 的程式應該都會自動用 cmd 開啟才對, 另外你可以試著加上 CREATE_FORCEDOS 這個旗標, CreateProcess(NULL, "MyDosApp.exe", NULL, NULL, TRUE, CREATE_FORCEDOS | NORMAL_PRIORITY_CLASS, NULL, aPath.c_str(), &StartupInfo, &ProcessInfo); 再試試看有沒有用。
------
我..........還很嫩! |
berlin
一般會員 發表:2 回覆:5 積分:1 註冊:2007-04-24 發送簡訊給我 |
我再把程式看了一下, 想要直接 CreateProcess(NULL, "MyDosApp.exe", ...), 我找到原因了, 我的path 設錯.
現在已經可以直接以 CreateProcess(NULL, "MyDosApp.exe", NULL, NULL, TRUE, NORMAL_PRIORITY_CLASS, NULL, aPath.c_str(), &StartupInfo, &ProcessInfo); 來create process 了. 這樣的話, TerminateProcess 也可以work了. 雖然不知道如何把 CreateProcess(NULL, "cmd.exe -C MyDosApp.exe" , NULL, NULL, TRUE, NORMAL_PRIORITY_CLASS, NULL, aPath.c_str(), &StartupInfo, &ProcessInfo); create 出來的process 砍掉, 但是, 問題也算解決了. 謝謝幫忙. |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |