Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
Master of Orion
Эксперт .NET
6100 / 4956 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
1

Использование Process для запрета запуска второй копии приложения

13.09.2012, 00:30. Показов 2694. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Простой вопрос. Нужно определить, есть ли процесс с данным именем, если есть, то Application.Exit();
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.09.2012, 00:30
Ответы с готовыми решениями:

Запрет запуска второй копии приложения
Всем огромный привет!!!!:) Помогите пожалуйста! Как запретить запуск второй копии приложения?

Запрет запуска второй копии приложения
Добрый вечер всем. Собственно говоря вопрос в теме. Гугл говорит, что нужно использовать...

Запрет запуска второй копии
Здравствуйте, пытаюсь запретить запуск второй копии с активацией окна (вывода на передний план...

Запрет запуска второй копии и перезапуск
Всем привет! Пытаюсь реализовать запрет на запуск второй копии приложения. Вот мой код: int WINAPI...

8
4 / 4 / 1
Регистрация: 03.09.2012
Сообщений: 22
13.09.2012, 00:41 2
Mutex
http://stackoverflow.com/quest... n-instance
0
Master of Orion
Эксперт .NET
6100 / 4956 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
13.09.2012, 00:44  [ТС] 3
Можно же сделать проще? Вроде есть метод GetProcessByName или как-то так. Если есть, то Exit. 2 строчки, а этот мьютекс вообще какой-то мутный, причем с указателями, которые непонятно зачем там вообще нужны. Задача же простая
0
Почетный модератор
Эксперт .NET
8722 / 3674 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
13.09.2012, 00:56 4
Лучший ответ Сообщение было отмечено как решение

Решение

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
using System;
using System.Threading;
using System.Windows.Forms;
using SomeNamesapace.Forms;
 
namespace SomeNamesapace
{
    static class Program
    {
 
        static Mutex mutex;
 
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main ( )
        {
            bool created;
 
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault( false );
 
            mutex = new Mutex( true, "F37E84CB-D76A-49B1-A1AC-80870903087B", out created );
 
            if ( !created )
            {
                MessageBox.Show( "One instance alredy run!" );
                return;
            }
 
            Application.Run( new frmAuth() );
            mutex.Dispose();
        }
    }
}
Цитата Сообщение от Psilon Посмотреть сообщение
Вроде есть метод GetProcessByName
Я изменю название exe и что Вы будете делать тогда?
4
Master of Orion
Эксперт .NET
6100 / 4956 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
13.09.2012, 01:17  [ТС] 5
SSTREGG, ну я думал, просто изменить строковую константу имени, но видимо, это не очень гибкое решение
Вопрос, почему строка имеет именно такой вид:
C#
1
"F37E84CB-D76A-49B1-A1AC-80870903087B"
0
Почетный модератор
Эксперт .NET
8722 / 3674 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
13.09.2012, 01:20 6
Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от Psilon Посмотреть сообщение
Вопрос, почему строка имеет именно такой вид:
Потому что мне так захотелось + шанс того что это имя будет уникально очень высок и не совпадет случайно с левым процессом.
Имя мьютекса может быть любым, главное не null и не "", тогда (если null или "") он будет локальным. Подробнее на MSDN.
3
26 / 26 / 4
Регистрация: 20.07.2012
Сообщений: 399
Записей в блоге: 1
13.09.2012, 21:46 7
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
  System.Diagnostics.Process[] procs = System.Diagnostics.Process.GetProcesses();
            try
            {
                System.Diagnostics.Process proc = procs.First(p => p.ProcessName == "название");
                if (proc != null)
                {
                    //если обнаружит то сделает это
 
                    
                    
 
 
                }
            }
            catch { button1.Enabled = false; } //если нет то сделает это, в данный момент это из моейм программы
        }
я так использовал для себя : )
ах да вызывал таймер и вешал код в таймере , получалось как бы в цикле ^ _^ нубокод но,!
1
22 / 22 / 1
Регистрация: 25.02.2012
Сообщений: 132
14.09.2012, 18:55 8
а как сделать чтоб он вместо MessageBox'а делал активным окно этого приложения которое уже запущено?
0
Почетный модератор
Эксперт .NET
8722 / 3674 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
14.09.2012, 20:24 9
Лучший ответ Сообщение было отмечено как решение

Решение

pinvoke.cs
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
using System;
using System.Runtime.InteropServices;
 
namespace pinvoke
{
    class User32
    {
        const string USER32 = "user32.dll";
 
        public static readonly IntPtr HWND_BROADCAST = (IntPtr)0xFFFF;
 
        [DllImport( USER32, SetLastError = true )]
        [return: MarshalAs( UnmanagedType.Bool )]
        public static extern bool PostMessage (
            [In] IntPtr hWnd,
            [In] uint Msg,
            [In] IntPtr wParam,
            [In] IntPtr lParam
            );
 
        [DllImport( USER32, SetLastError = true, CharSet = CharSet.Unicode )]
        public static extern uint RegisterWindowMessage (
            [In] string lpString
            );
    }
}
Program.cs
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
47
48
49
50
51
using System;
using System.ComponentModel;
using System.Runtime.InteropServices;
using System.Threading;
using System.Windows.Forms;
 
namespace WindowsFormsApplication12
{
    static class Program
    {
        const string APP_ID = "F37E84CB-D76A-49B1-A1AC-80870903087B";
 
        public static readonly uint WM_ACTIVATEME;
        static Mutex mutex;
 
        static Program ( )
        {
            WM_ACTIVATEME = pinvoke.User32.RegisterWindowMessage( APP_ID );
 
            if ( WM_ACTIVATEME == 0 )
                throw new Win32Exception( Marshal.GetLastWin32Error() );
        }
 
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main ( )
        {
            bool created = false;
 
            mutex = new Mutex( true, APP_ID, out created );
 
            if ( !created )
            {
                pinvoke.User32.PostMessage(
                    pinvoke.User32.HWND_BROADCAST,
                    WM_ACTIVATEME,
                    IntPtr.Zero, IntPtr.Zero
                    );
                return;
            }
 
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault( false );
            Application.Run( new Form1() );
 
            mutex.Dispose(); // In .NET < 4: mutex.Close();
        }
    }
}
Form1.cs
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
using System.Windows.Forms;
 
namespace WindowsFormsApplication12
{
    public partial class Form1 : Form
    {
        public Form1 ( )
        {
            InitializeComponent();
        }
 
        protected override void WndProc ( ref Message m )
        {
            if ( m.Msg == Program.WM_ACTIVATEME )
                this.Activate();
 
            base.WndProc( ref m );
        }
    }
}
4
14.09.2012, 20:24
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.09.2012, 20:24
Помогаю со студенческими работами здесь

Запрет запуска второй копии приложений
Нужно запретить запуск второй копии чужого приложения. Т.е. пользователь ткнул 5 раз на ярлык GTA5...

MFC. Запрет запуска второй копии программы
Здравстуйте. В главе 3 книги Дж. Рихтера есть простая реализация примера для запрета запуска...

Delphi: Запрет запуска второй копии разными пользователями!
Данная тема здесь создавалась неоднократно, но варианты запрета, которые здесь приводились подходят...

Запрет запуска копии приложения
Как запретить запуск копии приложения? Конечно, есть идеи по созданию левого файла, который...


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

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