Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: ехе прекрасно стартует в командном окне, но напрочь не работает, если его стартовать из кода...  (Прочитано 431 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Malaja
Команда клуба

de
Offline Offline
Пол: Женский

« : 11-06-2019 15:03 » 

Приветствую всех! И сразу говорю - просьба не смеяться над идиотом...

Проблема странная:
на машине установлен софт C:\Program Files (x86)\Graphviz2.38\bin\dot.exe. С его помощью надо из файла с расширением dot сгенерировать график.
Если это делать в командном окне, то все прекрасно работает. КОманда выглядит так:

cd c:/
cd Program Files (x86)\Graphviz2.38\bin\
dot.exe -Tsvg D:\irina\test.dot > D:\irina\test.svg

А вот любая попытка запустить эту же операцию из c# - кода вылетает в трубу...

1 Сначала я сделала классический код (даю упрощенный вариант):

                string graphvizPath = @"C:\Program Files (x86)\Graphviz2.38\bin\dot.exe";
                string graphvizFlag = " -Tsvg ";
                string cmdString = graphvizFlag + @"D:\irina\test.dot > D:\irina\test.svg";
                using (Process graphvizStart = new Process())
                {
                    graphvizStart.StartInfo.CreateNoWindow = true;
                    graphvizStart.StartInfo.Arguments = cmdString;
                    graphvizStart.StartInfo.FileName = graphvizPath;
                    graphvizStart.StartInfo.RedirectStandardOutput = true;
                    graphvizStart.StartInfo.UseShellExecute = false;
                    //graphvizStart.StartInfo.WorkingDirectory = @"C:\Program Files (x86)\Graphviz2.38\bin\";
                    graphvizStart.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
                    graphvizStart.Start();

                }

вылетает с ошибкой...

Пробовала как с WorkingDirectory , так и без

2. Но - "врагу не сдается наш гордый "Варяг""(С)! Пусть и с некоторым недоумением, почему это вдруг то, что должно работать сразу, не работает... А черт его знает...

Создала бат - файл (test.bat) [проверила его на вшивость в командном окне - работает! ]:

cd c:/
cd Program Files (x86)\Graphviz2.38\bin\
g\Data\rucomp.svg
dot.exe -Tsvg D:\irina\test.dot > D:\irina\test.svg

и переделала код:

                using (Process graphvizStart = new Process())
                {
                    graphvizStart.StartInfo.CreateNoWindow = true;
                    graphvizStart.StartInfo.Arguments = @"D:\irina\test.bat";
                    graphvizStart.StartInfo.FileName = @"C:\windows\system32\cmd.exe";
                    graphvizStart.StartInfo.UseShellExecute = false;
                    graphvizStart.StartInfo.RedirectStandardOutput = true;
                    //graphvizStart.StartInfo.WorkingDirectory = @"C:\windows\system32\";
                    graphvizStart.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
                    graphvizStart.Start();

                }

Как ни странно, не работает!

Вопрос - где я туплю???

Заранее благодарю за подсказку...
Записан

холоднокровней, Маня, Ви не на работе
---------------------------------------
четкое определение сущности бытия:
- А мы в прошлом или в будущем?- спросила Алиса.
- Мы в жопе, - ответил кролик.
- А "жопа" - это настоящее? - спросила Алиса.
- А "жопа" - это у нас символ вечности.
Malaja
Команда клуба

de
Offline Offline
Пол: Женский

« Ответ #1 : 11-06-2019 16:12 » 

Update:

1 классический код - работает:

                string graphvizPath = @"C:\Program Files (x86)\Graphviz2.38\bin\dot.exe";
                string graphvizFlag = " -Tsvg ";
                string cmdString = graphvizFlag + @"D:\irina\test.dot -оD:\irina\test.svg";
                using (var graphvizStart = new Process())
                {
                    //graphvizStart.StartInfo.Verb = "runas"; // Run process as admin.
                    //graphvizStart.StartInfo.WorkingDirectory = @"C:\ProgramData";

                    graphvizStart.StartInfo.FileName = @"C:\Program Files (x86)\Graphviz2.38\bin\dot.exe";
                    graphvizStart.StartInfo.Arguments = cmdString;
                    graphvizStart.Start();
                    graphvizStart.WaitForExit();
                }

Даже админ - права не нужны оказались. А то я уже на них грешить начала.
Была моя ошибка при вызове ехе - почему-то перенаправление в файл с помощью > не работает...

2. А вот старт с помощью бат - файла так и не работает...
Создала бат - файл (test.bat) [проверила его на вшивость в командном окне - работает! ]:

cd c:/
cd Program Files (x86)\Graphviz2.38\bin\
g\Data\rucomp.svg
dot.exe -Tsvg D:\irina\test.dot -оD:\irina\test.svg

и переделала код:

                using (Process graphvizStart = new Process())
                {
                    graphvizStart.StartInfo.CreateNoWindow = true;
                    graphvizStart.StartInfo.Arguments = @"D:\irina\test.bat";
                    graphvizStart.StartInfo.FileName = @"C:\windows\system32\cmd.exe";
                    graphvizStart.StartInfo.UseShellExecute = false;
                    graphvizStart.StartInfo.RedirectStandardOutput = true;
                    //graphvizStart.StartInfo.WorkingDirectory = @"C:\windows\system32\";
                    graphvizStart.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
                    graphvizStart.Start();

                }

Как ни странно, не работает!

Вопрос - где я туплю со вторым вызовом??? Уже интересно самой...

Заранее благодарю за подсказку...
Записан

холоднокровней, Маня, Ви не на работе
---------------------------------------
четкое определение сущности бытия:
- А мы в прошлом или в будущем?- спросила Алиса.
- Мы в жопе, - ответил кролик.
- А "жопа" - это настоящее? - спросила Алиса.
- А "жопа" - это у нас символ вечности.
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #2 : 11-06-2019 23:36 » new

https://docs.microsoft.com/ru-ru/dotnet/api/system.diagnostics.processstartinfo.redirectstandardoutput?view=netframework-4.8#System_Diagnostics_ProcessStartInfo_RedirectStandardOutput
Тут примерчик есть. Поможет?
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #3 : 12-06-2019 16:27 » 

Ирин, ты в батнике переходишь в папку (~задаёшь текущую директорию)
c:/Program Files (x86)\Graphviz2.38\bin\

а свой код запускаешь - мы не знаем, где. А, видимо, твоему экзешнику нужно что-то из паки bin.

Можно попробовать в программе перейти туда же, либо добавить тот путь в PATH

Попробуй ещё graphvizStart.StartInfo.WorkingDirectory задать к bin
« Последнее редактирование: 12-06-2019 16:28 от Алексей++ » Записан

Malaja
Команда клуба

de
Offline Offline
Пол: Женский

« Ответ #4 : 13-06-2019 15:57 » 

Господа, пардон за задержку с ответом!
Сначала у нас были проблемы с сетью, а потом надо было срочно кое-что доделать и сдать. Так что руки просто не дошли.
Завтра обязателно попробую и расскажу о результатах.

Там какая-то загвоздка при обработке бат-файлов... Тут уже спортивный интерес проснулся Ага
Записан

холоднокровней, Маня, Ви не на работе
---------------------------------------
четкое определение сущности бытия:
- А мы в прошлом или в будущем?- спросила Алиса.
- Мы в жопе, - ответил кролик.
- А "жопа" - это настоящее? - спросила Алиса.
- А "жопа" - это у нас символ вечности.
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #5 : 13-06-2019 21:32 » 

Сия строчка в батнике что означает?
>> g\Data\rucomp.svg
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #6 : 14-06-2019 05:35 » 

Джон, это, стало быть, в текущей директории есть каталог "g", в котором каталог "Data" c файлом "rucomp.svg" Краснею
Записан

Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #7 : 14-06-2019 16:33 » 

Улыбаюсь Лёш, ты сам веришь в то что говоришь? Даже если так, то что? сначала выполняется cd, это я понимаю, чтобы вызывать экзешник в "родной среде". А эта строчка что делает?

Сравни код (строка 7) из первого поста. Совпадение с точностью до этой строчки.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #8 : 15-06-2019 15:40 » 

Джон, я не просто верю, я даже проверил, что это работает (создал папку g и в ней папку Data - в последней лежит файл, который выполняется). Три строчки

cd c:/
cd Program Files (x86)\Graphviz2.38\bin\
g\Data\rucomp.svg

стало быть, делают то же самое, что:
cd "c:/Program Files (x86)\Graphviz2.38\bin\"
"c:\Program Files (x86)\Graphviz2.38\bin\g\Data\rucomp.svg"

но я точно не знаю, очепятка у Ирины или нет )

а сейчас так - bin это текущая директория, а что-то запускается из Data
« Последнее редактирование: 15-06-2019 15:44 от Алексей++ » Записан

Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #9 : 16-06-2019 02:42 » 

на машине установлен софт C:\Program Files (x86)\Graphviz2.38\bin\dot.exe. С его помощью надо из файла с расширением dot сгенерировать график.
Если это делать в командном окне, то все прекрасно работает. КОманда выглядит так:

cd c:/
cd Program Files (x86)\Graphviz2.38\bin\
dot.exe -Tsvg D:\irina\test.dot > D:\irina\test.svg

Это раз.

                string graphvizPath = @"C:\Program Files (x86)\Graphviz2.38\bin\dot.exe";
                string graphvizFlag = " -Tsvg ";
                string cmdString = graphvizFlag + @"D:\irina\test.dot > D:\irina\test.svg";
...
                //graphvizStart.StartInfo.WorkingDirectory = @"C:\Program Files (x86)\Graphviz2.38\bin\";

Это два.

Т.о.
1. Устанавливаем папку bin
2. из неё запускаем dot.exe с тремя опциями 1-целевой тип (SVG), 2-исходный файл (test.dot) 3-файл результата (test.svg)

Внимание вопрос! Каким боком сюда вписывается строчка "g\Data\rucomp.svg", и что именно она делает? Ага
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines