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

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

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

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

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

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

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

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

Может быть есть попроще способ?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.07.2016, 14:10     Запрет запуска второй копии приложений
Посмотрите здесь:

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

Копии - C++
class a { ... public: a (a &o); a &operator = (a &o); ... }; .... a o1,o2;

конструктор копии - C++
Мне кажется что здесь также должен вызывать конструктор копия при возврате объекта obj из функции Get()! Разве нет? #include <iostream.h>...

Конструктор копии - C++
Здравствуйте! Не могу никак правильно использовать конструктор копии, тоесть создать копию обьекта (массива):( Вот конструктор с...

Конструктор копии - C++
Конструктор копии вызывается при: 1)явном создании копии 2)при передачи параметров в функцию (по значению) 3)при возвращении объекта...

конструктор копии - C++
Здравствуйте. Необходимо было написать небольшую программку, связанную с выполнением определенных операций над матрицами. Я решил сделать...

Не вызывается конструктор копии - C++
#define st system("pause"); #include <iostream> #include <string.h> using namespace std; class temp{ public: int a; char*p;...

Конструкторы копии и перемещения - C++
Объясните, пожалуйста, следующее поведение. Итак, есть 4 кода: 1: #include <iostream> #include <string> int i; class...

Конструктор копии и операторы - C++
list::list(list const& l) { l.H(); if (l.head==NULL) {head=present=NULL; return;} head=present=new element(l.head); ...

Конструктор копии в Классах - C++
Подскажите пожалуйста правильно ли я написала и вызвала конструктор копии и деструктор, а то мне выдает 2 ошибки. #include...

Мелкая и глубокая копии - C++
#include <cassert> #include <cstring> #include <cstdlib> #include <cstdio> #include <iostream> #include <iomanip> using...

Вызов конструктора копии - C++
Не вызывается конструктор копии из производного класса #include <iostream> using namespace std; class A { int x; public: ...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Хрисипп
17 / 27 / 8
Регистрация: 09.02.2016
Сообщений: 212
10.07.2016, 16:40     Запрет запуска второй копии приложений #2
можно запихнуть запуск в cmd файл( то бишь ярлык) и при его запуске будет открываться консоль(там уже можешь и написать что-нибудь,мол подождите) и пока игра не будет закрыта, не закроется и консоль
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);}
//---------------------------------------------------------------------------
Естественно нет обработки парочки ошибок. Причем как минимум одной критичной. И если игра запускается через лаунчер, то данная программа без модификации бесполезна. В принципе доделать не сложно. Как высплюсь, доделаю.
Ответ Создать тему
Опции темы

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