Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
3 / 3 / 0
Регистрация: 27.02.2015
Сообщений: 13

System.Disagnostics.Process.Start Error

24.07.2015, 23:24. Показов 1966. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
У меня есть два консольных приложения. Назовём их ConsoleApp и ConsoleChecker
Оба работают с одной и той же базой sqlite3.
Смысл в том, что ConsoleApp если нужно запускает ConsoleChecker и тот обновляет нужные таблицы в базе.

Сам ConsoleChecker при этом состоит из пачек POST и GET HttpWebRequest'ов. Полученными из интеренета данными он и обновляет базу.

Проблема в том, что ConsoleChecker при компиляции работает отлично, а вот если поместить скомпилированные файлы ConsoleChecker'a в отдельную директорию ("Checker") в папке с проектом ConsoleApp и запустить его :
C#
1
System.Diagnostics.Process.Start(@""+ BASE_DIR + "Checker" +Path.DirectorySeparatorChar+ "Checker.exe", "-a");
то запускаясь, он выдает
Unhandled exception : System.Net.WebExeption : The remote server returned an error: (400) Bad Request.

При этом, если его запустить просто двойным кликом мышки в той же папке Checker - всё работает нормально.
Подскажите пожалуйста, может нужно запускать с какими-то параметрами или как-то в режиме администраторских прав. Я новичек в C# - поэтому ума не приложу.

Добавлено через 4 часа 20 минут
UP..
Помогите пожалуйста... Объясните, что именно я делаю не так.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
24.07.2015, 23:24
Ответы с готовыми решениями:

Process.start: не открывается картинка на Windows XP
// запуск процесса Process imgProcess = new Process(); mgProcess.StartInfo.FileName = "F:/exemple.jpg"; imgProcess.Start();код...

Не работает переменная в Process.Start (CMD)
Как можно использовать переменные из CMD в этом коде? Process.Start("cmd.exe", "/C set str=\"asd\" & echo %str% &...

Не открывает exe через Process.Start
Есть папка "1", в этой папке тоже есть папка "2" Запускаю "1.exe" с папки "1"... "1.exe" включает прогаму "2.exe" из папки...

7
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18285 / 14208 / 5368
Регистрация: 17.03.2014
Сообщений: 28,887
Записей в блоге: 1
24.07.2015, 23:58
Лучший ответ Сообщение было отмечено Ev_Hyper как решение

Решение

skaaznn, попробуй указать working directory при запуске:
C#
1
2
3
4
5
6
var startInfo = new ProcessStartInfo {
    FileName = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"Checker\Checker.exe"),
    Arguments = "-a",
};
startInfo.WorkingDirectory = Path.GetDirectoryName(startInfo.FileName);
Process.Start(startInfo);
1
3 / 3 / 0
Регистрация: 27.02.2015
Сообщений: 13
25.07.2015, 00:15  [ТС]
OwenGlendower, удивительно конечно, но Ваш вариант заработал сразу) Хотя, что тут может быть удивительного, - я же "новичек". )))
Благодарю Вас.
Вопрос закрыт.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18285 / 14208 / 5368
Регистрация: 17.03.2014
Сообщений: 28,887
Записей в блоге: 1
25.07.2015, 00:40
skaaznn, не спеши. То что код помог это хорошо. Теперь надо найти ошибку в программе из-за которой это происходит. Ошибка никуда не делась. Мы её только замаскировали. Ошибка очевидно в неправильной работе с путями к файлам. Чтобы найти её открой проект с Checker-ом. В свойствах проекта на закладке Debug укажи левый Working Directory. Запусти отладку. Приложение должно сгенерировать исключение про которое ты писал в первом сообщении. Ты увидишь в каком месте это произошло и сможешь проанализировать причины.
0
3 / 3 / 0
Регистрация: 27.02.2015
Сообщений: 13
25.07.2015, 01:38  [ТС]
OwenGlendower, что-то у меня проанализировать не очень получается.
WorkingDirectory была вообще пустая. Я указал левую.

An unhandled exception of type 'System.Net.WebException' occurred in System.dll
Additional information: The remote server returned an error: (400) Bad Request.

Сама строка на которой вылетает ошибка :
C#
1
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
Код целиком :
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// POST [url]https://*****.com/cas/tgts[/url]
            {
                data = "{\"login\":\"" + sUsername + "\",\"password\":\"" + sPassword + "\"}";
                ByteArr = Encoding.ASCII.GetBytes(data);
                {
                    HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://*****.com/cas/tgts");
                    request.Method = "POST";
                    request.CookieContainer = Cook;
                    request.ContentType = "application/json; charset=utf-8";
                    request.ContentLength = ByteArr.Length;
                    request.GetRequestStream().Write(ByteArr, 0, ByteArr.Length);
                    using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
                        using (StreamReader myStreamReader = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
                        {
                            html = myStreamReader.ReadToEnd();
                            json = JObject.Parse(html);
....
                        }
                    }
                }
            }
                    {
Объясните пожалуйста, если не сложно, в чём тут может быть дело? (адрес сайта я специально скрыл звездочками, чтобы нечаянно не нарушить правила форума)
Если вернуть WorkingDirectory - всё работает прекрасно. Ответы от сервера приходят.

И ещё один вопрос. Я хочу попробовать реализовать чтобы ConsoleApp как бы спал и ждал пока запущенный им ConsoleChecker выполнит запросы и обновит базу. Можете подсказать ссылки почитать по этой теме? Я в принципе понимаю неплохо, что именно делаю, и что хочу получить. Мне б только подсказать куда копать, готовый код ненужен. Его мне самому интересно писать. =)
Ещё раз благодарю Вас)
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18285 / 14208 / 5368
Регистрация: 17.03.2014
Сообщений: 28,887
Записей в блоге: 1
25.07.2015, 03:33
skaaznn, в приведенном коде я вижу только одну ошибку - поток который вернул GetRequestStream() нужно закрывать. Добавь вызов Close() или окружи using-ом (предпочительнее). Почему смена каталога убирает исключение по данному коду понять нельзя. Откуда берутся значения переменных sUsername и sPassword? Может они пустые или там что-то не, что заставляет сервер ответить кодом 400.

Цитата Сообщение от skaaznn Посмотреть сообщение
Я хочу попробовать реализовать чтобы ConsoleApp как бы спал и ждал пока запущенный им ConsoleChecker выполнит запросы и обновит базу.
Читай про средства взаимодействия между процессами. Например, EventWaitHandle. С его помощью два процесса смогут обмениваться сигналами.
0
3 / 3 / 0
Регистрация: 27.02.2015
Сообщений: 13
25.07.2015, 03:46  [ТС]
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Почему смена каталога убирает исключение по данному коду понять нельзя. Откуда берутся значения переменных sUsername и sPassword? Может они пустые или там что-то не, что заставляет сервер ответить кодом 400.
Переменные sUsername и sPassword берутся из файла config.ini который лежит в директории с проектом и передаются с функцию с аргументами.
Я так понимаю если перепутать WorkDirectory программа уже не сможет адекватно отыскать конфиг и отправит пустые sUsername и sPassword. Отсюда и неадекватный ответ сервера. Bad request.
Сегодня уже поздно. Завтра попробую отправить запрос на сервер с намеренно пустыми Username&Password и думаю, что получу ту же ошибку. Затем уже посмотрю как можно её избежать. Может username&password передавать параметрами к запуску Checker'a?
C#
1
2
3
4
5
6
7
var startInfo = new ProcessStartInfo
                {
                    FileName = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"Checker\Checker.exe"),
                    Arguments = "-a, uname ..., password ... ",
                };
                startInfo.WorkingDirectory = Path.GetDirectoryName(startInfo.FileName);
                Process.Start(startInfo);
Спасибо Вам, что навели куда копать.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18285 / 14208 / 5368
Регистрация: 17.03.2014
Сообщений: 28,887
Записей в блоге: 1
25.07.2015, 03:57
Цитата Сообщение от skaaznn Посмотреть сообщение
Переменные sUsername и sPassword берутся из файла config.ini который лежит в директории с проектом и передаются с функцию с аргументами.
Проверяй как ты формируешь путь к config.ini. Если он лежит в том же каталоге, что и Checker.exe, то полный путь следует формировать так:
C#
1
string configPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"config.ini");
И ни в коем случае не следует использовать Directory.GetCurrentDirectory() или Environment.CurrentDirectory. Они могут подвести.

Цитата Сообщение от skaaznn Посмотреть сообщение
Может username&password передавать параметрами к запуску Checker'a?
Если есть желание и время, то почему бы и нет.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.07.2015, 03:57
Помогаю со студенческими работами здесь

Открытие txt в блокноте - не срабатывает Process.Start
Добрый день! Мне нужно, чтобы по нажатию кнопки открылся файл "Описание программы.txt", который находится в одной папке с...

Process.Start, как проверить существование exe
Мне нужно у клиента запускать приложения: Тут все понятно, написали и понеслась..... Process.Start Но что делать У одного...

Как при Process.Start() указать текущую директорию
Уже обращался сегодня по теме запуска сторонних приложений, но тут возникла другая проблема. Решил расширить функции своей утилиты, чтобы...

Отловить ошибку внешнего приложения, запускающегося с помощью process.Start
Runtime error-программа завершила работу аварийно или с ненулевым кодом возврата Нужно отловить ошибку внешнего приложения запускающегося...

Process.Start: как запустить файл, находящийся в директории программы
Еще раз здравствуйте!) Подскажите пожалуйста. Я ознакомился с Process.Start(), и у меня появился вопрос, что надо писать что бы он искал...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера 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, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru