进程创建

启动进程
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;
}

猜你喜欢

转载自www.cnblogs.com/dailycode/p/9436628.html