joynter |
Отправлено: 18.10.2004, 14:37 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 137
|
необходимо разрешить проге запускаться множеством копий.
дайте, пожалуйста пинка в правильном направлении. |
|
Gedeon |
Отправлено: 18.10.2004, 15:21 |
|
Ветеран
Группа: Модератор
Сообщений: 1742
|
Так а разве проблема с тем, чтоб запускать много копий программы возникает по умолчанию? Создаешь проект и запускай сколько влезет, обычно у народа проблемы, чтоб больше одной не запускалось или я вопроса не понял?
|
|
joynter |
Отправлено: 18.10.2004, 15:48 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 137
|
заранее известно, сто в винмайне стоит мьютекс |
|
Gedeon |
Отправлено: 18.10.2004, 16:22 |
|
Ветеран
Группа: Модератор
Сообщений: 1742
|
Прога я так понимаю не Ваша? А имя мьютекса известно? Побольше бы информации.
|
|
joynter |
Отправлено: 18.10.2004, 16:46 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 137
|
2Gedeon
Давайте рассмотрим общий случай с именем мьютекса, например, any_name. |
|
Gedeon |
Отправлено: 19.10.2004, 11:43 |
|
Ветеран
Группа: Модератор
Сообщений: 1742
|
Ну так тогда просто все, делаем программу запускающую нужную
CODE |
#include <windows.h>
#pragma hdrstop
//---------------------------------------------------------------------------
#pragma argsused
WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
HANDLE hMutex = OpenMutex(MUTEX_ALL_ACCESS, 0, "any_name");
if(hMutex) ReleaseMutex(hMutex);
CreateProcess(...); // тут запускаем саму прогу
return 0;
}
//--------------------------------------------------------------------------- |
|
|
joynter |
Отправлено: 19.10.2004, 13:21 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 137
|
я мож чего не понимаю, но по-моему именно так в основной проге и реализована блокировка запуска второй копии. меня обратный вопрос интересует |
|
Gedeon |
Отправлено: 19.10.2004, 13:56 |
|
Ветеран
Группа: Модератор
Сообщений: 1742
|
Вы хоть бы посмотрели внимательно, а потом бы говорили. Защита реализуется вот так
CODE |
try
{
// Пытаемся открыть мьютекс.
HANDLE hMutex = OpenMutex(MUTEX_ALL_ACCESS, 0, "EmailNotifier2");
if(!hMutex)
hMutex = CreateMutex(0, 0, "EmailNotifier2"); // если его нет, то создаем и продолжаем работу программы
else
return 0; // иначе завершаем программу
//дальше работает наше приложение
Application->Initialize();
Application->CreateForm(__classid(TF_MainForm), &F_MainForm);
Application->Run();
//а вот после выхода убиваем мьютекс
ReleaseMutex(hMutex);
}
catch (Exception &exception)
{
Application->ShowException(&exception);
} |
В коде который я написал до этого, если мьютекс существует, я его сразу убиваю и запускаю после этого нужную программу.
|
|
joynter |
Отправлено: 19.10.2004, 15:02 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 137
|
2Gedeon
извините — сразу не разобрался, что ReleaseMutex(hMutex) возвращает false и принял ваш код за вызов мьютекса. |
|