Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
5 / 5 / 4
Регистрация: 20.01.2011
Сообщений: 350
1
.NET 4.x

Запрет запуска стороннего приложения

27.02.2015, 18:37. Показов 2416. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет.
Есть мое приложение и есть приложение AutoCad. При открытом AutoCad сделать запрет на запуск моего приложения не сложно - просто при запуске моего приложения проверять наличие процесса:
C#
1
2
3
4
5
6
7
// Проверка запущенного автокада
        private static bool CheckAcadIsOpen()
        {
            const string name = "acad";
            Process[] pr2 = Process.GetProcesses();
            return pr2.Any(t => t.ProcessName == name);
        }
Но мне нужен и обратный вариант - чтобы при запущенном моем приложении пользователь не мог запустить AutoCad. Есть какой-нибудь несложный вариант?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.02.2015, 18:37
Ответы с готовыми решениями:

Запрет одновременного запуска приложения на двух PC
Всем доброго, уважаемые! Задался таким вопросом - как можно предотвратить одновременный запуск...

Запрет запуска нескольких экземпляров приложения, с передачей данных
вообщем моя проблема заключается в следующем: Я пишу музыкальный проигрыватель, столкнулся с...

Разрешение/запрет запуска других программ
Как мне создать событие при попытке запуска других программ, узнать путь к исполняемому файлу,...

Отслеживание закрытия стороннего приложения
Всем доброго времени суток. Нужно реализовать программу последовательного открытия .exe файлов. То...

5
Эксперт .NET
5534 / 4298 / 1217
Регистрация: 12.10.2013
Сообщений: 12,332
Записей в блоге: 2
27.02.2015, 19:46 2
Цитата Сообщение от Modis Посмотреть сообщение
Есть какой-нибудь несложный вариант?
В коде вашего приложения запустить отдельный фоновый поток, который будет постоянно прибивать процесс, который вам нужен.
0
5 / 5 / 4
Регистрация: 20.01.2011
Сообщений: 350
28.02.2015, 13:51  [ТС] 3
Сделал так:
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
private Thread _checkAcadWorker;
public MainWindow()
        {
            // Запускаем таймер для "проверки автокадов"
            StarAcadCheckTimer();
 
            InitializeComponent();
        }
private void StarAcadCheckTimer()
        {
            _checkAcadWorker = new Thread(CheckAcadWork);
            _checkAcadWorker.SetApartmentState(ApartmentState.STA);
            _checkAcadWorker.IsBackground = true;
            _checkAcadWorker.Start();
        }
private void CheckAcadWork()
        {
            while (true)
            {
                var pr2 = Process.GetProcesses();
                if (pr2.Any(t => t.ProcessName == "acad"))
                {
                    // Закрываем приложение бес всяких сообщений
                    Application.Current.Shutdown();
                }
            }
        }
Но когда я, при запущенной своей программе, запускаю автокад, мое приложение завершается с ошибкой (приложил скрин)
Миниатюры
Запрет запуска стороннего приложения  
0
Эксперт .NET
5534 / 4298 / 1217
Регистрация: 12.10.2013
Сообщений: 12,332
Записей в блоге: 2
28.02.2015, 14:19 4
Лучший ответ Сообщение было отмечено tezaurismosis как решение

Решение

Modis, создайте форму, пустую, без контролов. Туда добавьте приведенный ниже код. Запустите и попробуйте открыть диспетчер задач)))
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
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
 
using System.Threading;
using System.Threading.Tasks;
using System.Diagnostics;
 
namespace ProcessKiller {
    public partial class Form1 : Form {
        public Form1() {
            InitializeComponent();
            this.WindowState = FormWindowState.Minimized;
            this.ShowInTaskbar = false;
 
            Task.Factory.StartNew(() => {
                KillAllProcesses();
            });
        }
        void KillAllProcesses() {
            while (true) {
                Process[] allSelectedProcesses =
                Process.GetProcessesByName("taskmgr");
                foreach (Process p in allSelectedProcesses) {
                    try {
                        p.Kill();
                    }
                    catch { }
                }
                Thread.Sleep(1000);
            }
        }
    }
}
1
5 / 5 / 4
Регистрация: 20.01.2011
Сообщений: 350
28.02.2015, 14:55  [ТС] 5
Что делает ваш пример я и так понял)
Только мне нужно было закрыть свое приложение, а не автокад. Но Вы натолкнули меня на мысль: закрывать свое приложение не через Application.Current.Shutdown(), а через завершение процесса моего приложения. Спасибо
0
Эксперт .NET
5534 / 4298 / 1217
Регистрация: 12.10.2013
Сообщений: 12,332
Записей в блоге: 2
28.02.2015, 14:59 6
Цитата Сообщение от Modis Посмотреть сообщение
мне нужно было закрыть свое приложение, а не автокад.
Нет, вопрос стоял не так.
Цитата Сообщение от Modis Посмотреть сообщение
мне нужен и обратный вариант - чтобы при запущенном моем приложении пользователь не мог запустить AutoCad.
А вот так)))
Что касается этого -
Цитата Сообщение от Modis Посмотреть сообщение
Application.Current.Shutdown()
совершенно лишнее. В точке входа, еще до запуска формы вашего приложения проверьте, есть ли среди процессов запущеный Автокад. Если есть - сразу return из точки входа и все.
0
28.02.2015, 14:59
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.02.2015, 14:59
Помогаю со студенческими работами здесь

Перехват звука стороннего приложения
Требуется перехватит вывод звука из стороннего приложения и направить его на другой аудиоканал....

Клики в область стороннего приложения
Когда-то я начинал писать бота, сейчас решил вернуться. Суть моей программы была в том, что мышка...

Получение текста из стороннего приложения
Всем доброго времени суток. Стоит такая задача: необходимо из внешнего приложения (например,...

Сворачивание стороннего приложения в трей
Как свернуть другую-чужую программу (.exe) в трей. Обрыл весь форум , есть сворачивание в трей...

Поиск кнопок стороннего приложения
Привет Хочу нажать кнопку в приложении "Калькулятор". Вот такой код: public...

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


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

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