Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
8 / 8 / 2
Регистрация: 26.07.2009
Сообщений: 28
1

Отследить копию программы

01.06.2011, 19:11. Показов 1795. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Знаю как сделать, чтобы не запускалась копия программы, используя mutex. Но нужно отследить запуск второй программы. Для чего нужно? Запустил программу. Потом запускаешь ещё раз (ещё одну копию но с каким-то параметром), и в первой проге должно поменяться состояние в зависимости от параметра запуска копии. Естественно копию проги не разрешать запускать. Для чего это нужно, а для JumpList.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.06.2011, 19:11
Ответы с готовыми решениями:

отловить запущенную копию программы
использую для отлова код bool createdNew; System.Threading.Mutex...

Отследить вылет сторонеей программы
Каким образом отследить вылет программы, то есть появляется окно "виндовс остановила программу.....

Отследить завершение процесса программы
Здравствуйте. Роюсь-роюсь, никак не дороюсь. Запускаю программу, появляется процесс. (логично)...

Как сделать копию программы
Нужно,чтобы программа копировала сама себя на диск,только без пути в коде

7
Заблокирован
01.06.2011, 19:19 2
Цитата Сообщение от Sardar Посмотреть сообщение
Знаю как сделать, чтобы не запускалась копия программы, используя mutex.
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
using System.Threading;
 
 static class Program
    {
        
        private static Mutex _syncObject;
        private const string _syncObjectName = "{E663FA11-AE0D-480e-9FCA-4BE9B8CDB4E9}";
        /// 
        /// Главная точка входа для приложения.
        /// 
        [STAThread]
        static void Main()
        {
            bool createdNew;
            _syncObject = new Mutex(true, _syncObjectName, out createdNew);
            if (!createdNew)
            {
                MessageBox.Show("Программа уже запущена.");// не обязательно
                return;
            }
            // Продолжаем выполнение
 
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
    }
0
8 / 8 / 2
Регистрация: 26.07.2009
Сообщений: 28
01.06.2011, 22:10  [ТС] 3
Это-то понятно. Вопрос в другом. Вот когда копия программы проверяет о создании оригинала здесь она у тебя при существовании просто выводит сообщение и выходит. А нужно чтобы оригинал изменил своё состояние. Или например накапливал счётчик сколько копий было запущенно. Вроде понятно выражаюсь или нет? Т.е запустил прогу потом ещё одну и ещё одну. В итоге последние две проги тупо завершились, и в первой счётчик стал 2.

Добавлено через 1 минуту
Получается нужно как-то уметь обрабатывать событие запуска копии. Надеюсь это возможно без хуков.
0
мастер топоров
916 / 741 / 101
Регистрация: 16.08.2009
Сообщений: 1,476
01.06.2011, 22:46 4
просто отследить появление можно в лоб: запустить таймер и по событию тика мониторить не появилось ли в процессах нового экземпляра программы. но это костыль. должен быть другой выход.
я не могу понять как вы отследите из первой процесса параметр, с которым запускается новый экземпляр

Добавлено через 40 секунд
да, а таймер запускать только в первой программе с использованием мьютекса
0
8 / 8 / 2
Регистрация: 26.07.2009
Сообщений: 28
01.06.2011, 23:01  [ТС] 5
Использование таймера - не рационально. Жрёт процессорное время просто так.
Я задаю такой вопрос потому что это нужно для JumpList в Windows 7 для taskbar. В JumpList можно создавать только ссылки на программы или документы. Взять например Месседжер от микрософта. При нажатии правой кнопки на taskbar там можно менять статус. Или взять к примеру обычный qip - тоже можно поменять статус. Делают они как я понял это так: запускается ещё один экземпляр, который проверяет существование другого и если он есть то в нём меняет статус и завершается. Для пользователя как бы ася как была так и есть и статус поменялся.

Добавлено через 2 минуты
Отследить возможно 100пудова, но как. Ведать нужно WinAPI как-то использовать или хуки, или ещё чего. Может кто-нибудь прочитает и напишет ответ, или хотя бы давай те свои примеры как вы думаете это возможно сделать. Кому интересно прочитайте про JumpList поймёте откуда вытекает проблема.
0
44 / 45 / 15
Регистрация: 11.08.2010
Сообщений: 226
01.06.2011, 23:49 6
Я бы сделал просто: сделал бы в той программе, ну которая стартует на главном компьютере, серверный класс, а в остальных сделал бы клиент. При коннекте или при приеме одного байта(выбирай любой вариант) бы увеличивал значение переменной count, отключал клиент и все. Процессор это не нагрузит, да и память тоже.
0
мастер топоров
916 / 741 / 101
Регистрация: 16.08.2009
Сообщений: 1,476
02.06.2011, 01:49 7
Цитата Сообщение от Sardar Посмотреть сообщение
Использование таймера - не рационально.
ну да, понмаю.
не понял сразу что вы имели в виду под JumpList. вам следует копать в WinAPI. вот ссылка: http://archive.msdn.microsoft.... PICodePack если вы там были - копайтесь ещё. у меня было желание повозиться с этим, но сейчас нет времени. если что накопаете - буду благодарен за примеры
0
8 / 8 / 2
Регистрация: 26.07.2009
Сообщений: 28
03.06.2011, 16:50  [ТС] 8
Спасибо за пример попробую сделать так. Так же спасибо за ссылки нужно почитать и там тоже. Если продвинусь в этой теме отпишусь. На самом деле актуальный вопрос уже пора бы прогать под семёрку. Видел видео на techdays про JumpList, но там этот вопрос как раз не рассматривался.

Добавлено через 4 минуты
Использовать клиент-сервер для передачи значений прикольно. Не думал никогда так передавать локально между прогами ))). Ведать на lookup нужно передавать... Всегда использовал при интернет-приложениях, но никак не в локальных... Спасибо за совет. Попробую реальзовать
0
03.06.2011, 16:50
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.06.2011, 16:50
Помогаю со студенческими работами здесь

Развернуть копию программы из трея
Нужно чтобы 2ая копию программы разворачивала 1уй копию программы. Много читал по форумам но так и...

Открыть в проводнике одну копию программы.
c++ builder 6 1. Я ассоциировал программу с файлами. 2. Добавил в Project1.cpp код HANDLE...

Как залить бутлоадер в китайскую копию arduino nano v3.0(CH340) через копию UNO
Пришли 2 контроллера, китацские копии arduino nano 3 и UNO. Обе на CH340. Драйвера встали...

Как можно открыть и запустить резервную копию программы
Здравствуйте. Есть резервная копия программы, как можно её открыть и запустить ( именно программы...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru