Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/8: Рейтинг темы: голосов - 8, средняя оценка - 4.50
0 / 0 / 1
Регистрация: 03.07.2017
Сообщений: 88

Вариант запуска приложения в зависимости от входных параметров

17.10.2018, 17:19. Показов 1802. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет!
Помогите пожалуйста решить такую проблему...
Пишу проигрыватель.
Задача стоит в следующем, если пользователь выбирает аудио файл в проводнике, то запускать его воспроизведение.
Если же пользователь пытается запустить непосредственно exe файл проигрывателя, то выдавать окно обзора для открытия аудио файла...
Точка входа в программу выглядит так:

C#
1
2
3
4
5
6
7
8
9
10
11
12
static void Main()
{
string[] args = Environment.GetCommandLineArgs();
if(args[1] == "")
{
MessageBox.Show("Второй параметр пуст");
}
else
{
Application.Run(new MainForm(args[1]));
}
}
Пока я не открываю окно обзора, а просто вывожу сообщение на экран.
Вся проблема заключается в том, что когда выбирается аудио файл через проводник, то проигрыватель запускается как нужно.
Входные параметры я проверял, всё верно.
Но вот когда я пытаюсь запустить exe файл проигрывателя, то не происходит ровным счётом ничего.
Если даже и появляется процесс, то он тут же снимается...
Подскажите пожалуйста, в чём может быть проблема?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.10.2018, 17:19
Ответы с готовыми решениями:

Формирвоать имя файла в зависимости от входных параметров
Такой вот глупенький вопрос. Нужно формировать имя выходного файла в зависимости от передаваемых аргументов командной строки. Например,...

Вывод новостей из инфоблока в зависимости от входных параметров
Есть компонент news.list, он подключен так: <div><?$APPLICATION->IncludeComponent("bitrix:news.list", ".default", array( ...

Передача параметров запуска для приложения
Необходимо запустить Run.bat из моего приложения, но перед запуском батника надо перейти в папку расположения Run.bat (путь E:\EXE). Т.е....

7
 Аватар для Рядовой
1524 / 914 / 329
Регистрация: 17.05.2015
Сообщений: 3,438
17.10.2018, 17:35
Цитата Сообщение от vlad-mus Посмотреть сообщение
Но вот когда я пытаюсь запустить exe файл проигрывателя, то не происходит ровным счётом ничего.
Ну так запустите новую форму, и уже в ней вызывайте MessageBox
C#
1
2
3
4
if(args[1] == "")
{
//new form
}
0
911 / 796 / 329
Регистрация: 08.02.2014
Сообщений: 2,391
17.10.2018, 17:42
какой-то велосипед у Вас с получением аргументов выходит пишите:
C#
1
2
3
4
5
6
7
8
9
10
11
12
static void Main(string[] args)
{
 
if(args.Length > 1 && args[1] == "")
{
MessageBox.Show("Второй параметр пуст");
}
else
{
Application.Run(new MainForm(args[1]));
}
}
и не забывайте о том что количество параметром не обязательно 2 придёт, может и 0, и 1, и что тогда?

Добавлено через 5 минут
p.s. ты точно уверен что при запуске просто exe у тебя есть второй параметр в аргументах к которому ты обращаешься? если он отсутствует то приложение и будет падать, можно посмотреть в событиях винды что оно при этом записало, и записало ли
0
0 / 0 / 1
Регистрация: 03.07.2017
Сообщений: 88
17.10.2018, 20:37  [ТС]
Ну а если мне нужно открыть окно обзора? OpenFileDialog
Я пишу код в блокноте, поэтому добавлять на форму контролы не могу...
Только всё программно.
Это я заранее уточняю на тему: "добавьте соответствующий контрол на форму в вижуал студии".
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18245 / 14160 / 5366
Регистрация: 17.03.2014
Сообщений: 28,848
Записей в блоге: 1
17.10.2018, 22:10
vlad-mus, OpenFileDialog это обычный класс.
C#
1
2
3
4
5
var ofd = new OpenFileDialog();
if (ofd.ShowDialog() == DialogResult.OK)
{
    // Файл выбран
}
Единственное что может понадобиться это
C#
1
using System.WindowsForms;
0
0 / 0 / 1
Регистрация: 03.07.2017
Сообщений: 88
18.10.2018, 08:49  [ТС]
Дело в том, что это у меня windows forms приложение.
Проверку входных параметров я делаю здесь:

C#
1
2
3
4
5
6
7
8
9
10
11
12
static void Main()
{
string[] args = Environment.GetCommandLineArgs();
if(args[0] == args[1])
{
var ofd = new OpenFileDialog();
ofd.ShowDialog();
}
else
{
Application.Run(new MainForm(args[1]));
}
Таким образом я проверяю, если пользователь пытается запустить exe файл проигрывателя, то входные параметры совпадут и должно открыться окно обзора, а если попытка открыть другой файл, то просто запустить проигрыватель.
Второй вариант работает, но вот первая часть условия, с совпадением параметров и открытием окна обзора не работает...
При чём я не успеваю заметить, появляется процесс или нет.
0
911 / 796 / 329
Регистрация: 08.02.2014
Сообщений: 2,391
18.10.2018, 09:22
Лучший ответ Сообщение было отмечено vlad-mus как решение

Решение

Цитата Сообщение от vlad-mus Посмотреть сообщение
При чём я не успеваю заметить, появляется процесс или нет.
я Вам уже дал понять, что у вас нету args[1] при запуске просто exe файла и при обращении к такому полю будет ошибка и приложение аварийно завершиться, данная ошибка может быть записана в журнал Windows (о чём я также говорил). Чтобы попробовать это исключить для начала нужно использоваться конструкцию try/catch чтобы ловить ошибки, и проверять вообще сколько аргументов пришло то Вам:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
static void Main()
{
    string[] args = Environment.GetCommandLineArgs();
    if(args.Lenght > 1) // делаем это всё только при условии что у нас 2 и более параметра пришло
    {
        if(args[0] == args[1])
        {
            var ofd = new OpenFileDialog();
            ofd.ShowDialog();
        }
        else
        {
            Application.Run(new MainForm(args[1]));
        }
    }
    else
    {
        MessageBox.Show("Упс. К нам пришло меньше двух параметров :(");
    }
}
0
0 / 0 / 1
Регистрация: 03.07.2017
Сообщений: 88
18.10.2018, 19:04  [ТС]
Спасибо всем огромное!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.10.2018, 19:04
Помогаю со студенческими работами здесь

Передача параметров запуска для приложения
Добрый вечер, есть программка которая работает из командной строки (конвертирует один тип файла в другой name1.smi и namt2.sdf...

Запрос двух параметров для запуска приложения
Ребят, всем привет! Подскажите как запустить приложение с передачей параметров? Необходимо, при запуске батника на рабочем столе...

Файл входных параметров
Собственно было пару консольных приложений которые в качестве входных данных считывали из текстового файла (включает название, значение и...

Присваивание входных параметров в конструкторе
Добрый день. Недавно наткнулся на код такого типа #define MaxSize 100 class Test { private: int Size; public: ...

Посчитать сумму входных параметров
def suma(*args): some code... print suma(1, 2, 3) # should be 6 print suma(4)(5, 6) # should be 15 print suma(7)(8)(9) #...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
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
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru