日期:2014-05-19  浏览次数:20963 次

判断进程是否已启动的问题
请问如何判断一个进程是否已经启动

------解决方案--------------------
枚举进程
------解决方案--------------------
我一般实现的多线程是用backworker组件来实现的 他有个属性叫做isbusy属性是判断它是否正在执行的 给你个参考

------解决方案--------------------
1. 用API函数,调用C++ dll.
C++代码:
BOOL GetProcessList ()
{
HANDLE hProcessSnap = NULL;
BOOL bRet = FALSE;
PROCESSENTRY32 pe32 = {0};

// Take a snapshot of all processes in the system.

hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

if (hProcessSnap == INVALID_HANDLE_VALUE)
return (FALSE);

// Fill in the size of the structure before using it.

pe32.dwSize = sizeof(PROCESSENTRY32);

// Walk the snapshot of the processes, and for each process,
// display information.

if (Process32First(hProcessSnap, &pe32))
{
DWORD dwPriorityClass;
BOOL bGotModule = FALSE;
MODULEENTRY32 me32 = {0};

do
{
bGotModule = GetProcessModule(pe32.th32ProcessID,
pe32.th32ModuleID, &me32, sizeof(MODULEENTRY32));

if (bGotModule)
{
HANDLE hProcess;

// Get the actual priority class.
hProcess = OpenProcess (PROCESS_ALL_ACCESS,
FALSE, pe32.th32ProcessID);
dwPriorityClass = GetPriorityClass (hProcess);
CloseHandle (hProcess);

// Print the process 's information.
printf( "\nPriority Class Base\t%d\n ",
pe32.pcPriClassBase);
printf( "PID\t\t\t%d\n ", pe32.th32ProcessID);
printf( "Thread Count\t\t%d\n ", pe32.cntThreads);
printf( "Module Name\t\t%s\n ", me32.szModule);
printf( "Full Path\t\t%s\n\n ", me32.szExePath);
}
}
while (Process32Next(hProcessSnap, &pe32));
bRet = TRUE;
}
else
bRet = FALSE; // could not walk the list of processes

// Do not forget to clean up the snapshot object.

CloseHandle (hProcessSnap);
return (bRet);
}

2. 笨办法,启动一个进程就写标志到一个本地资源(如文件),下一个进程启动先去读这个资源来判断,标志为false(已经有相同进程在运行),启动,为true,放弃.