Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.96/25: Рейтинг темы: голосов - 25, средняя оценка - 4.96
 Аватар для Adler_lug
0 / 0 / 0
Регистрация: 14.04.2015
Сообщений: 14

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

06.09.2017, 14:26. Показов 4630. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Не придумал как тему можно назвать кратко и что быбыло понятно...
Задача следующая.
Нужно в моей программе, в WebBrowser открывать ссылки, передаваемые сторонней программой через командную стороку, т.е к примеру My.exe http://google.com, но что бы моя программа не запускалась каждый раз снова, а страница обновлялась в уже запущенной My.exe.
Запрет запуска второго экземпляра программы реализовал так:
C#
1
2
3
4
5
6
7
8
9
10
11
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            SingleInstanceApplication.Run(new Form1(), StartupNextInstanceHandler);
        }
        public static string link;
        static void StartupNextInstanceHandler(object sender, StartupNextInstanceEventArgs e)
        {
            
        }
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    public class SingleInstanceApplication : WindowsFormsApplicationBase
    {
        private SingleInstanceApplication()
        {
            base.IsSingleInstance = true;
        }
 
        public static void Run(Form f, StartupNextInstanceEventHandler startupHandler)
        {
            SingleInstanceApplication app = new SingleInstanceApplication();
            app.MainForm = f;
            app.StartupNextInstance += startupHandler;
            app.Run(Environment.GetCommandLineArgs());
        }
    }
Программа второй раз не запускается.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
        public Form1()
        {
            SetBrowserFeatureControl();
 
            InitializeComponent();
            webBrowser1.ScriptErrorsSuppressed = true;
 
            string[] arg = Environment.GetCommandLineArgs();
            
 
            string login;
            string password;
            if (arg.Length == 2)
            {
                if (CheckURL(@arg[1]))
                {
                    webBrowser1.Navigate(@arg[1]);
                }
            }
...
Если программу с параметром запускать "с нуля", то все хорошо, страница открывается, но если повторно попробовать запустить, то страница не обновляется. При этом, если перед или после webBrowser1.Navigate(@arg[1]); поставить какую нибудь "контрольную" команду, для проверки (к примеру, MessageBox.Show(@arg[1])), то до этого места доходит, а страница не обновляется. При этом @arg[1] обновляется на новое значение.

Как реализовать, что бы открывалась новая переданная ссылка в уже запущенной программе?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.09.2017, 14:26
Ответы с готовыми решениями:

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

Не работает программа при запуске в Windows через командную строку
Дали задание скомпилить cmake под Linux. Там все получилось. Как доп.задание дали перенести и скомпилить cmake на windows через командную...

При запуске ПК изображение появляется через 2-3 минуты, с уже запущенной ОС
Доброго времени суток форумчане, нужна ваша помощь. У меня есть настольный ПК с такими конфигурациями: MSI Z97-G43 Asus PCI-Ex Radeon...

3
 Аватар для Adler_lug
0 / 0 / 0
Регистрация: 14.04.2015
Сообщений: 14
12.09.2017, 10:11  [ТС]
Надо было делать так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
static void StartupNextInstanceHandler(object sender, StartupNextInstanceEventArgs e)
        {
            SingleInstanceApplication sia = (SingleInstanceApplication)sender;
            Form1 f = (Form1)sia.ApplicationContext.MainForm;
            if (e.CommandLine.Count == 2)
            {
                string link = e.CommandLine[1];
                if (f.CheckURL(link))
                {
                    f.webBrowser1.Navigate(link);
                }
            }
        }
Ключевой момент в:
C#
1
2
SingleInstanceApplication sia = (SingleInstanceApplication)sender;
Form1 f = (Form1)sia.ApplicationContext.MainForm;
0
2 / 2 / 2
Регистрация: 02.06.2017
Сообщений: 63
12.09.2017, 14:55
У меня подобным образом реализован запрет на повторный запуск программы
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
static class Program
    {
        //appGuid для Mutex-a
        private static string appGuid = "3ae4924c-bfe8-402c-a879-7b8e10013751"; 
        [STAThread]
        static void Main()
        {
            //Mutex для запрета повторного запуска приложения
            using (Mutex mutex = new Mutex(false, @"Global\" + appGuid))
            {
                if (!mutex.WaitOne(0, false))
                {
                    MessageBox.Show("Внимание! Программа уже запущена. Запуск копии заблокирован", "Программа сообщает:");
                    return;
                }
 
                GC.Collect();
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new MainForm());
            }
 
        }
    }
0
 Аватар для Adler_lug
0 / 0 / 0
Регистрация: 14.04.2015
Сообщений: 14
13.09.2017, 10:25  [ТС]
GuardianCoder, перечитайте еще раз первый пост. Вопрос в том, как запретить повторный запуск программы вообще не стоял, если что...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.09.2017, 10:25
Помогаю со студенческими работами здесь

Как сделать чтобы программа сама запускалась при запуске компа
Как сделать чтобы программа сама запускалась при запуске компа

Ошибка при запуске через командную строку
Когда компилирую через IntelJ Idea всё норм. Если пытаюсь запустить через командную строку ошибка ...

Не открывается файл при запуске через командную строку
Написал небольшую игру (скорее прототип игры). Игра загружает список уровней с файла "levels.txt", всё лежит в одной папке. Когда...

Ошибка при запуске программы через командную строку
Добрый день форумчане! Есть exe программы которая стабильно работает и при запуске она просит ввести название файла если запускать ее...

Ошибка при запуске приложения через командную строку
подскажите, пожалуйста, в чем ошибка(почему не открывает файл)?


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru