Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.01.2011, 15:46   #1
Freer
Пользователь
 
Аватар для Freer
 
Регистрация: 20.10.2008
Сообщений: 64
Вопрос Запустить ДВА одинакОвых ПроцессА

Всем привет! Че та кучу форумов облазил и постов на эту тему.Везде говорят что скрыть процесс это неправильно.Типо сам пожалеешь.И вот что же делать в такой ситуации:

Цитата:
Есть прога которая запускается под виндой и тока в одном экземпляре.А мне (да и не тока мне) надо что бы в двух.Но при попытке запустить ее еще раз(при запущенной одной версии) вылетает ошибка, что мол программа уже запущена.
Сразу скажу, что готовые проги типо Hide Tools не работают.Приложение видит скрытый экземпляр и второй не запускает =( Еще оч важный момент что надо что бы под 7 ой работало. Потому как тот же Hide Tools прекрасно прячет процесс под XP и все работает.
Может можно запустить второй поток в процессе что бы его не скрывать и в нем запустить второй экземпляр приложения?
А может это я щас глупость сказал полную)
FreeR
Freer вне форума Ответить с цитированием
Старый 30.01.2011, 15:57   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А кто сказал что нельзя вышибить оба процесса? Кто сказал что антивирус это одобрит?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.01.2011, 16:58   #3
hotcooler17
Пользователь
 
Регистрация: 06.01.2009
Сообщений: 34
По умолчанию

Казалось бы - причем тут C/C++?
hotcooler17 вне форума Ответить с цитированием
Старый 30.01.2011, 23:25   #4
ISergeyN
Maniac
Форумчанин
 
Аватар для ISergeyN
 
Регистрация: 03.01.2009
Сообщений: 450
По умолчанию

Обычно защиту делают при помощи Мьютекса.. Вот и думай как его освободить не являясь его владельцем..
Цитата:
Может можно запустить второй поток в процессе что бы его не скрывать и в нем запустить второй экземпляр приложения?
Мало вероятно что поможет...
Стандартные библиотеки разработаны с учетом многолетнего опыта лучших программистов и они не больны "детскими болезнями крутизны в программизме"....

Последний раз редактировалось ISergeyN; 31.01.2011 в 00:05.
ISergeyN вне форума Ответить с цитированием
Старый 30.01.2011, 23:35   #5
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

интересно как google chrome себя копирует, или может быть не копирует, а просто создает процесс с таким же именем
NiCola999 вне форума Ответить с цитированием
Старый 30.01.2011, 23:53   #6
ISergeyN
Maniac
Форумчанин
 
Аватар для ISergeyN
 
Регистрация: 03.01.2009
Сообщений: 450
По умолчанию

NiCola999, как любое приложение.. просто не препятствует этому..
Стандартные библиотеки разработаны с учетом многолетнего опыта лучших программистов и они не больны "детскими болезнями крутизны в программизме"....
ISergeyN вне форума Ответить с цитированием
Старый 31.01.2011, 11:40   #7
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Запустить допустм запустите, а как остальные ресурсы вы делить между ними будете?
p51x вне форума Ответить с цитированием
Старый 31.01.2011, 20:11   #8
Freer
Пользователь
 
Аватар для Freer
 
Регистрация: 20.10.2008
Сообщений: 64
По умолчанию

Оу!Сколько всего наговорили) Спасибо за внимание и помощь! Дело в том что под WinXP процесс удается скрыть и запустить приложение повторно (вопрос с ресурсами слава богу винда сама решает), а вот в 7 ке этот код не срабатывает.А именно процесс то скрывается,но приложение его видит.Вот не пойму почему.Что в 7ке такого блин сделали =( Под Зло ХП работает этот код:
Код:
      NTSTATUS NTAPI Hook_XxQuerySystemInformation    (
                                                      IN NT::SYSTEM_INFORMATION_CLASS SystemInformationClass, // Информация о ////процессах и потоках = 5
                                                      IN OUT PVOID SystemInformation,
                                                      IN ULONG SystemInformationLength,
                                                      OUT PULONG ReturnLength OPTIONAL
                                                      )
      {
          NTSTATUS NTStatus = NULL;
          NTStatus = ((XXQUERYSYSTEMINFORMATION)(PROC) g_XxQuerySystemInformation)
              (SystemInformationClass, SystemInformation, SystemInformationLength, ReturnLength);
          if((SystemInformationClass == NT::SystemProcessAndThreadInformation &&
              NTStatus == STATUS_SUCCESS) == FALSE) return NTStatus;
          
          bool done = false;
          NT::PSYSTEM_PROCESSES sp = NT::PSYSTEM_PROCESSES(SystemInformation);
          for(NT::PSYSTEM_PROCESSES p = sp; !done;
              p = NT::PSYSTEM_PROCESSES(PCHAR(p) + p->NextEntryDelta)){
                  done = p->NextEntryDelta == 0;
                  if(p->ProcessID == progProcessId){
                      //_DbgBrk();
                      if(done){sp->NextEntryDelta = 0; break;}
                      sp->NextEntryDelta += p->NextEntryDelta;
                  }
                  sp = p;
          }
          return NTStatus;
      }
      ///////////////////////////Class 5//////////////////////////////////////////////////////
      typedef struct _SYSTEM_THREADS{
          LARGE_INTEGER KernelTime;
          LARGE_INTEGER UserTime;
          LARGE_INTEGER CreateTime;
          ULONG WaitTime;
          ULONG StartAddress;
          CLIENT_ID ClientId;
          KPRIORITY Priority;
          KPRIORITY BasPriority;
          ULONG ContextSwitchCount;
          THREAD_STATE Thread;
          KWAIT_REASON WaitReason;
      } SYSTEM_THREADS,
      *PSYSTEM_THREADS;
      typedef struct _SYSTEM_PROCESS{        
          ULONG NextEntryDelta;
          ULONG ThreadCount;
          ULONG Reserved1[6];
          LARGE_INTEGER CreateTime;
          LARGE_INTEGER UserTime;
          LARGE_INTEGER KernelTime;
          UNICODE_STRING ProcessName;
          KPRIORITY BasePriority;
          ULONG ProcessID;
          ULONG InheritedFromProcessID;
          ULONG HandleCount;
          ULONG Reserved2[2];
          ULONG PrivatePageCount;
          VM_COUNTERS VmCounters;
          IO_COUNTERS IoCounters;
          SYSTEM_THREADS Threads[1];
      } SYSTEM_PROCESSES,
      *PSYSTEM_PROCESSES;
И отвечу на вопрос -"..причем тут С++ .." ))) Ну как бы это потому что не Байсик)) Я вообще предпочитаю плюсы в решиении любых прикладных задач.
FreeR

Последний раз редактировалось Freer; 31.01.2011 в 20:13.
Freer вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как запустить два события по onLoad? kirosin JavaScript, Ajax 3 28.10.2010 05:32
Два процесса Sane2k Win Api 11 30.06.2010 23:39
Два одинаковых макроса GES Microsoft Office Excel 2 12.01.2010 11:27
Даны два слова одинаковой длины. Присвоить переменной К число, равное количеству попарно одинаковых букв. dimon_home Паскаль, Turbo Pascal, PascalABC.NET 1 16.06.2009 08:31
Как различить два процесса одного приложения? viter.alex Win Api 1 31.03.2009 21:01