C 啟動乙個外部程式 CreateProcess

2022-09-11 23:21:24 字數 2678 閱讀 8803

**自:

今天還是繼續說說c#呼叫系統api啟動外部程式的方法,今天要說的是createprocess這個api函式,相比前兩篇文章(一

、二)中所說的api,createprocess引數要更複雜一些,但使用起來,要更靈活。

1.匯入命名空間

using system.runtime.interopservices;

2. createprocess中用到了幾個結構體型別,先宣告他們:

[system.runtime.interopservices.structlayout(layoutkind.sequential)]

public

class

security_attributes

[structlayout(layoutkind.sequential)]

public

struct

startupinfo

[structlayout(layoutkind.sequential)]

public

struct

process_information

3. 宣告createprocess

[dllimport("

kernel32.dll

", charset =charset.ansi)]

public

static

extern

bool

createprocess(

security_attributes lpprocessattributes,

security_attributes lpthreadattributes,

bool

binherithandles,

intdwcreationflags,

stringbuilder lpenvironment,

stringbuilder lpcurrentdirectory,

refstartupinfo lpstartupinfo,

refprocess_information lpprocessinformation

);

4. 下邊這三個也是api,作用看注釋

#region win32 api : waitforsingleobject

//檢測乙個系統核心物件(執行緒,事件,訊號)的訊號狀態,當物件執行時間超過dwmilliseconds就返回,否則就一直等待物件返回訊號

[dllimport("

kernel32.dll")]

public

static

extern

uint waitforsingleobject(system.intptr hhandle, uint

dwmilliseconds);

#endregion

#region win32 api : closehandle

//關閉乙個核心物件,釋放物件占有的系統資源。其中包括檔案、檔案對映、程序、執行緒、安全和同步物件等

[dllimport("

kernel32.dll")]

public

static

extern

bool

closehandle(system.intptr hobject);

#endregion

#region win32 api : getexitcodeprocess

//獲取乙個已中斷程序的退出**,非零表示成功,零表示失敗。

//引數hprocess,想獲取退出**的乙個程序的控制代碼,引數lpexitcode,用於裝載程序退出**的乙個長整數變數。

[dllimport("

kernel32.dll")]

static

extern

bool getexitcodeprocess(system.intptr hprocess, ref

uint

lpexitcode);

#endregion

5. 如果示例中argm指定的程式執行時間很長,程序會被阻塞到waitforsingleobject行處,直到命令執行完畢或程序被中止才繼續執行後邊的語句。

string argm = "

cmd.exe";

startupinfo sinfo = new

startupinfo();

process_information pinfo = new

process_information();

if (!createprocess(null, new stringbuilder(argm), null, null, false, 0, null, null, ref sinfo, ref

pinfo))

uint i = 0

; waitforsingleobject(pinfo.hprocess,

int.maxvalue);

getexitcodeprocess(pinfo.hprocess,

refi);

closehandle(pinfo.hprocess);

closehandle(pinfo.hthread);

C 啟動乙個外部程式 1 WinExec

呼叫win32 api。1.using system.runtime.interopservices 2.define sw hide 0 隱藏視窗,活動狀態給令乙個視窗 define sw shownormal 1 用原來的大小和位置顯示乙個視窗,同時令其進入活動狀態 define sw norm...

使用乙個程式同時啟動多個程式 c

宿舍的肥仔每次開機就需要執行多個程式,他希望乙個程式實現這些事情,所以寫了個程式,大家有什麼意見可以給我提出來,我會多加修改,謝謝,貼上原始碼 using system using system.collections.generic using system.componentmodel usin...

在乙個程式中啟動另外乙個程式

最近剛剛開始工作,發現在學校學習的那些基本上知識打打基礎而已,在實際的專案運作中根本就沒用。革命尚未成功,通知仍需努力啊 嘿嘿 上正題 因為我們需要做乙個類似於監控的系統,這樣的話就涉及到多個程式需要同時執行,並且需要有乙個程式 去控制另外乙個程式,之前沒有做過,也沒見過,不過還好,有一同事之前做過...