1. 程式人生 > >進程創建

進程創建

exec const acl ppa pcs pre 控件 creat get

啟動進程
int __cdecl system(_In_opt_z_ char const* _Command);

UINT WINAPI WinExec(__in LPCSTR lpCmdLine, __in UINT uCmdShow);

HINSTANCE ShellExecute(HWND hwnd, LPCTSTR lpOperation, LPCTSTR lpFile, LPCTSTR lpParameters, LPCTSTR lpDirectory, INT nShowCmd);

BOOL WINAPI CreateProcess(
__in_opt LPCTSTR lpApplicationName,
__inout_opt LPTSTR lpCommandLine,
__in_opt LPSECURITY_ATTRIBUTES lpProcessAttributes, //通常置NULL。如果用於服務端則需要設置正確值。
__in_opt LPSECURITY_ATTRIBUTES lpThreadAttributes,
__in BOOL bInheritHandles,
__in DWORD dwCreationFlags,
__in_opt LPVOID lpEnvironment,
__in_opt LPCTSTR lpCurrentDirectory,
__in LPSTARTUPINFO lpStartupInfo,
__out LPPROCESS_INFORMATION lpProcessInformation
);
typedef struct _SECURITY_ATTRIBUTES {
DWORD nLength;
LPVOID lpSecurityDescriptor;
BOOL bInheritHandle;
} SECURITY_ATTRIBUTES, *PSECURITY_ATTRIBUTES, *LPSECURITY_ATTRIBUTES;
SECURITY_DESCRIPTOR Structure
Remarks
A security descriptor includes information that specifies the following components of an object‘s security:
An owner (SID)
A primary group (SID)
A discretionary ACL
A system ACL
Qualifiers for the preceding items

#include <windows.h>
#include <tchar.h>
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
    DWORD dw = 0;
    TCHAR szFilePath[] = "notepad.exe";
    switch (dw)
    {
    case 0:
        system(szFilePath);
        // (1)、他不會立即返回,直到你啟動的程序執行完成。
        // (2)、如果你啟動是windows程序,它仍然會啟動一個控制臺。
        
// (3)、它的返回值代表是否執行成功以及程序的退出碼。 break; case 1: WinExec(szFilePath, SW_SHOW); // (1)、它將啟動了一個新進程,並且立即返回。 // (2)、它多了一個參數:uCmdShow,可以一定程度上控件窗體的顯示,比如讓它後臺運行而不顯示出來。 // (3)、它無論啟動控制臺程序還是windows程序都只做你想要做的事,不會有上面啟動windows程序時先啟動控制臺窗口的動作。 // 它的不足之處: // (1)、它完全與本進程脫離,無法做些必要的控制
// (2)、無法得知啟動的程序是否退出。 // (3)、得不到啟動的程序的退出碼。 break; case 2: //ShellExecute(NULL, "open", strFilePath.GetBuffer(0), NULL, NULL, SW_SHOWNORMAL); ShellExecute(NULL, "open", "www.baidu.com", NULL, NULL, SW_SHOWNORMAL); // 1、2中如果傳入“XX.txt”,它們將不能成功執行,ShellExecute卻能很好地執行。 // 1、2中如果傳入“www.vczx.com”,將不能成功執行,而ShellExecute卻能很好地執行。 break; case 3: { STARTUPINFO si; PROCESS_INFORMATION pi; memset(&pi, 0, sizeof(pi)); memset(&si, 0, sizeof(STARTUPINFO)); si.cb = sizeof(STARTUPINFO);//設定結構的大小 // CreateProcess(NULL, // "notepad.exe", // NULL, // NULL, // FALSE, // NORMAL_PRIORITY_CLASS, // NULL, //進程的環境變量。即要創建的進程名稱的路徑。如果置NULL,參數1需要設置為全路徑。 // NULL, // &si, // &pi); CreateProcess("winmine.exe", "", NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &pi); } break; } return 0; }

進程創建