ezini Ответов: 1

Как проверить, работает ли в моем приложении 2 одинаковых процесса, C++


У меня есть приложение, которое запускает другую копию самого себя, но после того, как приложение запустилось дважды, оно больше не должно запускаться. Это консольное приложение.

Что я уже пробовал:

Я попытался написать это, чтобы проверить, работает ли мое приложение на 2 одинаковых proc.

void checkProcNumber(int cc ,const char* procfilename) {

	
	HANDLE hsnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
	PROCESSENTRY32 p32;
	p32.dwSize = sizeof(p32);
	BOOL hres = Process32First(hsnap, &p32);

	while (hres) {

		if (strcmp(p32.szExeFile, procfilename)==0) {

			cc ++;

		}

		hres = Process32Next(hsnap, &p32);
	}
	CloseHandle(hsnap);
}


А после этого открыть приложение (в основном)


TCHAR buffer[MAX_PATH] = { 0 };
	GetModuleFileName(NULL, buffer, MAX_PATH);
	string current_path = (buffer);
	ShellExecute(NULL, "open", current_path.c_str(), NULL, NULL, SW_HIDE);


и наконец это:

int x = 0;
	checkProcNumber(x, "test.exe");
	if (x == 2) {

		cout << "finish";
                Sleep(1000)
//and other code to exit from app.

	}


Проблема в том, что приложение не запускается дважды, а работает бесконечно

1 Ответов

Рейтинг:
1

Richard MacCutchan

int x = 0;
checkProcNumber(x, "test.exe");
if (x == 2) {

Значение x всегда будет ноль, так как вы ничего не возвращаете из checkProcNumber.
Измените свой код следующим образом:
int checkProcNumber(const char* procfilename) {
    int cc = 0;
// ...

    return cc;
}

// ...

x = checkProcNumber("test.exe");
if (x > 1) {

// ...


CPallini

5.