对于windows程序设计来说,启动一个进程有三种方法:WinExec,ShellExecute,CreateProcess。这里仅对CreateProcess的用法加以说明。
对于CreateProcess的详细参数读者可以查MSDN和《Windows API参考手册》,这里不具体说明。下面给出常用的方法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
STARTUPINFO startup; ZeroMemory( &startup, sizeof (startup) ); startup.cb = sizeof (startup); ZeroMemory( &m_procInfo, sizeof (m_procInfo) ); // 初始化结果体是必须的,否则会异常 BOOL bRetVal = ::CreateProcess( ( LPCWSTR )strProcPath, NULL, NULL, NULL, FALSE, 0, NULL, NULL, &startup, &m_procInfo ); if ( !bRetVal ) { AfxMessageBox( _T( "启动失败!" ) ); } |
说明:
第一个参数是应用程序的全路径,第二个参数是命令行参数。如果第一个参数为空,就必须在第二个参数中指定应用程序的路径。
如果启动的进程与当前进程不再同一个目录下,则第八个参数必须指定,第八个参数为启动的进程所在的路径。否则不能成功启动进程。如下所示:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
BOOL bRetVal = ::CreateProcess( ( LPCWSTR )strProcPath, NULL, NULL, NULL, FALSE, 0, NULL, ( LPCWSTR )strProcFolder, &startup, &m_procInfo ); if ( !bRetVal ) { AfxMessageBox( _T( "启动失败!" ) ); } |