Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Vergil
42 / 36 / 14
Регистрация: 11.11.2009
Сообщений: 243
#1

Запрет запуска второй копии приложений - C++

10.07.2016, 14:10. Просмотров 267. Ответов 2
Метки нет (Все метки)

Нужно запретить запуск второй копии чужого приложения.
Т.е. пользователь ткнул 5 раз на ярлык GTA5 в результате в процессе висит 2 GTA5, что не есть хорошо. Как этого можно избежать?
Пока что идея такова. Мое приложение висит в памяти. Ярылк переделывается на что-то вроде "C:\myprogramm\app.exe" -name "GTA5" -launcher "C:\Games\GTA5\GTAVplay.exe" -path "C:\Games\GTA5\GTAV.exe"
Параметры передаются в программу. Кстати, в какую сторону копать, как я понял так можно сделать?
Запускается игра по этим параметрам. Создается какой-то флаг. При повторном запуске проверяется этот флаг и если он есть, то просто никак не реагировать.

Гуглил про мютексы, но как я понял их можно использовать только для своих приложений. Потому что при создании приложения создается мютекс, при закрытии удаляется. Или прикручивать проверку закрыто приложение или нет. Ну или я что-то не так понял.

Ну и второй вариант начинать искать такой ехе уже в запущенных программах. И если есть он, то не запускать.
Еще, вроде как, если через creatprocess запустить программу, то можно отследить ее закрытие?

Может быть есть попроще способ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.07.2016, 14:10
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Запрет запуска второй копии приложений (C++):

Ошибка запуска Eclipse. Исчезает ехе файл запуска - C++
Привет всем :P Изучаю С++ на Eclipse. Создал проект Hello World. Нажимаю Run - все хорошо. Меняю немного код , дополняю его , совсем...

Запрет запуска второй копии - Delphi
Здравствуйте, пытаюсь запретить запуск второй копии с активацией окна (вывода на передний план свернутого окна) program Project1; ...

Запрет запуска второй копии приложения - C++ Builder
Всем огромный привет!!!!:) Помогите пожалуйста! Как запретить запуск второй копии приложения?

Запрет запуска второй копии приложения - C++ Qt
Добрый вечер всем. Собственно говоря вопрос в теме. Гугл говорит, что нужно использовать qtsingleapplication. Только я не совсем понял как...

Запрет запуска второй копии и перезапуск - C++ Builder
Всем привет! Пытаюсь реализовать запрет на запуск второй копии приложения. Вот мой код: int WINAPI _tWinMain(HINSTANCE, HINSTANCE,...

MFC. Запрет запуска второй копии программы - Visual C++
Здравстуйте. В главе 3 книги Дж. Рихтера есть простая реализация примера для запрета запуска второй копии программы. Пытаюсь ее...

2
Хрисипп
19 / 29 / 8
Регистрация: 09.02.2016
Сообщений: 217
10.07.2016, 16:40 #2
можно запихнуть запуск в cmd файл( то бишь ярлык) и при его запуске будет открываться консоль(там уже можешь и написать что-нибудь,мол подождите) и пока игра не будет закрыта, не закроется и консоль
0
Vergil
42 / 36 / 14
Регистрация: 11.11.2009
Сообщений: 243
10.07.2016, 22:58  [ТС] #3
можно запихнуть запуск в cmd файл( то бишь ярлык) и при его запуске будет открываться консоль(там уже можешь и написать что-нибудь,мол подождите) и пока игра не будет закрыта, не закроется и консоль
НЕ совсем понял, как мне это поможет

Пока нагородил такую конструкцию:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
HANDLE mutex;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{Application->ShowMainForm=false;
mutex=CreateMutex(NULL,true,L"MutexOfTheMyApplication");
DWORD result;
result = WaitForSingleObject(mutex,0);
UnicodeString path="";
if(result!=WAIT_OBJECT_0)
  {ShowMessage("Игра уже запущена. Если вы не видите игру, обратитесь к администратору");
 
  Application->Terminate();}
  else
  { for(int i=0;i<ParamCount()+1;i++)
     {if (ParamStr(i)=="-path"){i++; path=ParamStr(i);}
     }
    if(path==""){ShowMessage("Неверно указан путь, обратитесь к администратору");
    Application->Terminate();}
    else{STARTUPINFO cif;
    ZeroMemory(&cif,sizeof(STARTUPINFO));
    PROCESS_INFORMATION pi;
 
    if(CreateProcess(path.c_str(), NULL,
     NULL,NULL,FALSE,NULL,NULL,NULL,&cif,&pi)==true){
     WaitForSingleObject(pi.hProcess,INFINITE); }
     else {ShowMessage("Ошибка 2136. Обратитесь к администратору");}
     Application->Terminate();}  }
    }
//---------------------------------------------------------------------------
void __fastcall TForm1::FormDestroy(TObject *Sender)
{ReleaseMutex(mutex);
CloseHandle(mutex);}
//---------------------------------------------------------------------------
Естественно нет обработки парочки ошибок. Причем как минимум одной критичной. И если игра запускается через лаунчер, то данная программа без модификации бесполезна. В принципе доделать не сложно. Как высплюсь, доделаю.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.07.2016, 22:58
Привет! Вот еще темы с ответами:

Delphi: Запрет запуска второй копии разными пользователями! - Delphi
Данная тема здесь создавалась неоднократно, но варианты запрета, которые здесь приводились подходят только при попытке запуска одним...

Запрет запуска копии процесса - C++ Builder
HWND hWnd; hWnd=::FindWindow(name,NULL); if (hWnd) { if (IsIconic(hWnd)) ShowWindow(hWnd,SW_RESTORE); ...

Запрет запуска копии приложения - Pure Basic
Как запретить запуск копии приложения? Конечно, есть идеи по созданию левого файла, который отследить запуск копии и закроет ещё, но как...

Запрет запуска более 1 копии программы - Delphi
Здраствуйте я хотел бы узнать как сделать так чтобы запретить запуск 2 окна программы! &quot;Пример&quot; Я сделал программу, и могу запускать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru