Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/34: Рейтинг темы: голосов - 34, средняя оценка - 4.88
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1

Определить, что программа запущена и корректно её завершить.

22.12.2010, 06:06. Показов 6849. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Есть вопрос. Возможно ли как нибудь определить, что программа запущена? Например мне надо апдейтером перезаписать эксешник, апдейтер запустили вручную. Как узнать, что программа запущена и обновить эксешник не получится?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.12.2010, 06:06
Ответы с готовыми решениями:

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

Определить запущена ли программа в виртуальной среде
Как определить, что код выполняется на виртуальной машине?

Как определить с какими параметрами запущена программа
Всем привет! Сабж. Каким методом можно определить с какими параметрами запущена программа, и делать выводы? Т.е если /msg:1 то...

5
Заблокирован
22.12.2010, 09:00
Цитата Сообщение от Casper-SC Посмотреть сообщение
Возможно ли как нибудь определить, что программа запущена?
если программа ваша, можно использовать Mutex(он же пригодится для запуска одного экземпляра приложения), если не ваша, можно работать с приложением через функции WinAPI
0
burning1ife
 Аватар для kenny69
1466 / 1287 / 294
Регистрация: 21.09.2008
Сообщений: 3,438
Записей в блоге: 9
22.12.2010, 23:17
проверяет запущен ли exe, если да, то закрываем его и перезаписываем
C#
1
2
3
4
5
6
7
8
9
10
11
12
 
            var procesQuery = from p in Process.GetProcesses()
                              where p.ProcessName == "имя твоего процесса"
                              select p;
 
            MessageBox.Show(procesQuery.Count<Process>().ToString());
            if (procesQuery.Count<Process>() != 0)
                foreach (var p in procesQuery)
                {
                    p.Kill();
                }
             //здесь перезаписываем
1
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
22.12.2010, 23:33  [ТС]
Спасибо конечно. Но помоему это не гарантия от запуска единственного экземпляра процесса. Пока попробую с мьютексами, но WPF вроде они тупили... Я просто поставил целью как минимум, если обрыв в сети, то не дать запороться приложению, если любая ошибка, то тоже самое.

Добавлено через 1 минуту
Вот народ, жест доброй воли =):
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
 
namespace Internet
{
    /// <summary>
    /// Класс проверяет соединение с интернетом
    /// </summary>
    public static class InternetConnection
    {
        [DllImport("wininet.dll")]
        static extern bool InternetGetConnectedState(ref InternetConnectionState  lpdwFlags, int dwReserved);
 
        [Flags]
        enum InternetConnectionState : int
        {
            INTERNET_CONNECTION_MODEM = 0x1,
            INTERNET_CONNECTION_LAN = 0x2,
            INTERNET_CONNECTION_PROXY = 0x4,
            INTERNET_RAS_INSTALLED = 0x10,
            INTERNET_CONNECTION_OFFLINE = 0x20,
            INTERNET_CONNECTION_CONFIGURED = 0x40
        }
 
        /// <summary>
        /// Проверить, есть ли соединение с интернетом
        /// </summary>
        /// <returns></returns>
        public static Boolean CheckConnection()
        {
            InternetConnectionState flags = 0;
            //если не использовать checkStatus, то не правильно возвращает результат функция
            bool checkStatus = InternetGetConnectedState(ref flags, 0);
            return checkStatus;
        }
    }
}
C#
1
2
3
4
5
            Boolean connect = InternetConnection.CheckConnection(); //проверить соединение с интеренетом
            if (connect) //проверять надо именно так. Причины не помню, но вроде надо так...
            {
                  //КОД...
            }
0
burning1ife
 Аватар для kenny69
1466 / 1287 / 294
Регистрация: 21.09.2008
Сообщений: 3,438
Записей в блоге: 9
23.12.2010, 00:29
так я просто не понял, ты как будешь обновлять через запущенную программу программу, или с помощью отдельно запущенного апдейтера???...
я писал, для второго варианта

Не по теме:

PS. чтобы вообще с этим не мучаться - используй ClickOnce, там он сам определяет наличие обновления и производит тоже сама, при запуске приложения и наличия соединения с и-нетом...
http://www.techdays.ru/videos/1274.html




класс для ед. экз программы во вложении
использование в App.xaml.cs:

C#
1
2
3
4
5
6
   
        protected override void OnStartup(StartupEventArgs e)
        {
            WpfSingleInstance.Make();
            base.OnStartup(e);
        }
Вложения
Тип файла: rar WpfSingleInstance.rar (1.4 Кб, 46 просмотров)
1
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
23.12.2010, 07:25  [ТС]
Я кстати этот класс и использую для ограничения запущенных копий. Я запускаю апдейтер, как отдельное приложение, после обновления апдейтер уже запускает основное приложение. Блин, я не правильно выразился, сейчас перечитал свою писанину... Мой апдейтер может запускаться моей программой и отображать ход загрузки обновлений (2 ProgressBar'a и текстбоксы). Также его может запустить пользователь вручную и сам нажать: "Проверить обновления" и при определённых условиях "Скачать последнюю версию" (Что является одной и той же кнопкой, но суть меняется, как и текст на ней). Но может быть такая ситуация, когда пользователь запусти апдейтер вручную, а программа в это время будет работать. И получится, что эксешник как минимум не перезапишется и это будет уже не обновление... Вот я и хочу, чтобы можно было узнать, что программа запущена и завершить её работу.

Сейчас проверил. Почему-то при 2-ух процессах (кол-во не имеет значения, это так к слову) мне MessageBox всегда показывает 0 и не убивает их. Процесс назвал, точно так же как назван эксешник.

Добавлено через 1 минуту
А всё. Просто в качестве имени надо использовать имя такого типа: Name. А не: Name.exe

Разве это нормально, что будут убиваться процессы с одинаковыми именами? Возможно, как-то узнать что это именно процесс моей программы?

Добавлено через 16 минут
Пока сделал так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
                try
                {
                    var procesQuery = from p in Process.GetProcesses()
                                      where p.ProcessName == "Имя программы"//TODO: ("Имя программы") Если изменится в программе, то обязательно нужно и тут изменить
                                      select p;
 
                    if (procesQuery.Count<Process>() != 0)
                        foreach (var p in procesQuery)
                        {
                            //TODO: ("Главное окно") Если изменится в программе, то обязательно нужно и тут изменить
                            if (p.MainWindowTitle == "Главное окно")
                                p.Kill();
                        }
                }
                catch (Exception) { }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.12.2010, 07:25
Помогаю со студенческими работами здесь

Как определить папку, откуда запущена программа
Может хоть на это кто ответит?:) Пробовал гуглить на тему startup path winapi, ничего не нашел.

Как определить, из какого режима запущена программа?
Например есть консольное приложение.Как можно узнать,из какого графического режима оно было запущено? Подразумевается,что это не одно и...

Определить кем запущена программа. пользователь/windows?
Можно ли как нибудь сделать чтобы программа определяла как она запущена? пользователем или автозапуском виндуса? Добавлено через 6...

Определить, программа запущена на ноутбуке или десктопе
Здравствуйте, подскажите как можно проверить ноутбук или системный блок?

Как узнать, что программа запущена в первый раз?
Как узнать, что программа запущена в первый раз - без записи в настройки, реестр и создания дополнительных файлов? Допустим, программа...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru