注意CreateProcessW函式

2021-04-06 17:00:33 字數 656 閱讀 9943

看下面這個**有什麼問題:

#define process_name _t(「c://windows/notepad.ext」)

if (!createprocessw(null, process_name, null, null, false, 0, null, null, &startupinfo, &processinformation))

這裡的問題是你不能傳乙個const字串給createprocessw. msdn上一些說明createprocessw:

假如你傳入乙個const 字串給unicode版本的函式(createprocessw)會返回失敗。

但是msdn沒有解釋為什麼會失敗。寫createprocessw函式的開發人員在**中需要臨時修改這個輸入字串為了從引數中分離出執行程式的名字。這裡就有兩個問題。

第乙個是顯而易見的:你不能傳入constant字串。第二個是:你不能在多執行緒中使用相同的記憶體呼叫createprocess。createprocess在返回之前會恢復lpcommandline的字串內容,如果lpcommandline的內容已經不是原來傳入的內容時就會存在乙個時間順序的問題。因此你有兩個執行緒呼叫createprocess使用相同的記憶體,一些createprocess的呼叫可能會沒有命令列引數,而一些會有我們所期望的命令列引數。

CreateProcess注意的幾個地方

1.createprocess失敗,getlasterror返回998,應該是最後兩個引數沒有初始化導致的。2.要使外部程式隱藏視窗執行,需要將startupinfo的dwflags指定為startf useshowwindow,並且將wshowwindow指定為sw hide.3.第2條建立的程序...

CreateProcess函式使用

startupinfo infostart process information infoprocess memset infostart,0,sizeof infostart infostart.cb sizeof startupinfo infostart.dwflags startf use...

CreateProcess 終止程序

最近需要用到,稍微研究了下。1.供createprocess啟動的程序test.exe,只是列印出引數而已。include stdafx.h include include include using namespace std int main int argc,char argv 程式 incl...