[問題] CreateProcess 的問題

看板C_and_CPP作者 (我愛阿蓉)時間16年前 (2010/01/04 14:17), 編輯推噓8(8017)
留言25則, 7人參與, 最新討論串1/1
很挫折...再練習win32的API使用 卻一直都遇到怪問題 我使用CreateProcess 想開啟PCMAN 如下 PROCESS_INFORMATION pi; bool isCreate = CreateProcess(L"\"c:\\Program Files\\PCMan Combo\\PCMan.exe\"", L" ", 0, 0, false, 0, NULL, NULL, NULL, &pi); 一直出現run time error~Access violation 明明傳入的資訊應該沒錯 但是一直搞不定 LPSTARTUPINFO lpStartupInfo這欄 我沒有填入 就算填入也是無法成功開啟 加入後如下 STARTUPINFO si; memset(&si,0,sizeof(si)); si.cb= sizeof(si); bool isCreate = CreateProcess(L"\"c:\\Program Files\\PCMan Combo\\PCMan.exe\"", L" ", 0, 0, false, 0, NULL, NULL, &si, &pi); 我是哪裡搞錯了= = 覺得學win32 快吐血了 一堆東西也記不住 用成功了也不懂原理.... 謝謝各位 == -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.147.15.66

01/04 17:55, , 1F
把 "\"c:\\Program Files\\PCMan Combo\\PCMan.exe\""換成
01/04 17:55, 1F

01/04 17:57, , 2F
"c:\\Program Files\\PCMan Combo\\PCMan.exe"看看
01/04 17:57, 2F

01/04 19:09, , 3F
可以開了= = 不過疑問也來了 我是之前都用system()去開
01/04 19:09, 3F

01/04 19:12, , 4F
#1Az1fYbJ 這篇我問的 那時會有遇到空格就停的情況
01/04 19:12, 4F

01/04 19:12, , 5F
但是這裡為啥不需要這樣 是因為unicode和char*的差別嗎??
01/04 19:12, 5F

01/04 19:56, , 6F
建議用 GetStartupInfo ()
01/04 19:56, 6F

01/04 19:57, , 7F
另外對 CreateProcessW 的第二參數 lpCommandLine
01/04 19:57, 7F

01/04 19:58, , 8F
不該傳入一個 const string literal 請見 MSDN
01/04 19:58, 8F

01/04 19:59, , 9F
跳出 access violation 的原因應該就是因為那樣吧
01/04 19:59, 9F

01/04 20:37, , 10F
你覺得system跟CreateProcess是一模一樣的東西? 如果
01/04 20:37, 10F

01/04 20:37, , 11F
你覺得不是,那你覺得處理字串的規則一定會一樣? :P
01/04 20:37, 11F

01/04 20:37, , 12F
當然有可能不一樣...查一下MSDN吧...有很詳細的說明
01/04 20:37, 12F

01/04 22:06, , 13F
to U大 我發現是沒傳si 就會出現violation....不知道為啥
01/04 22:06, 13F

01/04 22:26, , 14F
有一個函數是 GetLastError() 什麼的,可看錯誤碼。
01/04 22:26, 14F

01/04 22:27, , 15F
if(!CreateProcess()){ GetLastError(); }
01/04 22:27, 15F

01/04 22:27, , 16F
接著去 Google "System Error Code"
01/04 22:27, 16F

01/04 22:27, , 17F
覺得win32就是不斷的看MSDN和論壇啊 Orz
01/04 22:27, 17F

01/04 22:30, , 18F
耶... 突然發覺原 PO 的問題已經解決了= ="
01/04 22:30, 18F

01/04 22:49, , 19F
也不算解決 我其實對 cplusplus大的那推文不了解....
01/04 22:49, 19F

01/04 23:30, , 20F
orz 查一下msdn啦~我是說system跟CreateProcess處理參數
01/04 23:30, 20F

01/04 23:37, , 21F
的方法不同....怎麼突然不能連續推文了...
01/04 23:37, 21F

01/04 23:41, , 22F
簡單的說, 就是什麼時候檔案路徑要加""避免被空白隔開,
01/04 23:41, 22F

01/04 23:44, , 23F
什麼時候不需要; 這些東西就要仔細查文件了....:)
01/04 23:44, 23F

01/05 00:07, , 24F
喔我以為是unicode那個我不懂的東西@@
01/05 00:07, 24F

01/05 00:11, , 25F
超久的推文間隔.... 其實MSDN我每次看的都更頭大....好痛苦
01/05 00:11, 25F
文章代碼(AID): #1BGOWNaL (C_and_CPP)