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

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

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

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

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 » new

Джон, это, стало быть, в текущей директории есть каталог "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."
Malaja
Команда клуба

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

« Ответ #10 : 02-07-2019 09:48 » 

"Не велите не казнить, велите слово молвить!" (С)

Я прошу прощения - меня накрыло слегка, но зато со всех сторон! Плюс жара... Короче, суммируя все вышесказанное - старость не радость!

1) Джон, по поводу ствоего замечания - это не отдельная строка, это я невнимательная... я не увидела. что при копировании кода я не до конца удалила ненужное...

Имелось в виду только:

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


2) Ром, я эти примеры тоже смотрела - я делаю именно то, что они и говорят. Не помогает. больной не выздоравливает...

3) Леш, если я запускаю своий батник напрямую из cmd-окна, то все работает, правда он по ходу дела ругается, ибо ему указание пути к моему ехе не нравится:

C:\Users\adteir0>D:\irina\graphviz_text.bat

C:\Users\adteir0>cd c/:
Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch. =
синтакс в имени файла или пути неверен (ну не нравится ему Program Files (x86) и все тут!)

C:\Users\adteir0>cd c:\Program Files (x86)\Graphviz2.38\bin\

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

c:\Program Files (x86)\Graphviz2.38\bin>dot.exe -Tsvg D:\irina\rucomp.dot -oD:\i
rina\rucomp.svg

c:\Program Files (x86)\Graphviz2.38\bin>


Насчет graphvizStart.StartInfo.WorkingDirectory - так при таком раскладе это не путь к моему ехе, а путь к cmd.exe...
Хотя я пробовала и такой вариант - результат тот же...

4) короче, я так и не нашла решения этой проблемы. Но времени на дальнейшие поиски просто жалко... Я думала, может я просто какую-то мелочь не учла, поэтому спросила вас, ибо незамыленным взглядом обычно сразу видны такие огрехи. Как-то при таких простых вещах совершенно не ожидаешь каких-то подводных камней..

Еще раз всем огромное спасибо и еще прошу прощения, что сначала дергала дурными вопросами, а потом не сразу ответила!
Обещаю исправиться - честное пионерско-комсомольское! Ага
Записан

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

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


« Ответ #11 : 02-07-2019 09:55 » 

Malaja, в таких случаях нужно пробовать для начала вариант, где ВСЕ пути полные указаны, да ещё и в кавычки их обернуть. Обычно такое работает, а потом уже нужно раскручивать постепенно до своей ситуации
Записан

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

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

« Ответ #12 : 02-07-2019 10:23 » 

Леш, чрто ты имеешь в виду под " да ещё и в кавычки их обернуть"?

Я пробовала оба варианта:

                graphvizStart.StartInfo.WorkingDirectory = @"C:\windows\system32\";

и

                graphvizStart.StartInfo.WorkingDirectory = @"c:\Program Files (x86)\Graphviz2.38\bin\";
Результат был одинаков.
Записан

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

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


« Ответ #13 : 02-07-2019 10:29 » 

Ирин, не, в этом месте, в самой программе, кавычки роли не играют, я имею в виду батник. В данном случае нужно пробовать указывать полные пути там, где конкретно указываются экзешники и другие файлы в качестве их параметров. Это вроде у тебя и так уже проставлено

Кстати, мысль, попробуй short вариант пути. Как в дотнете - не знаю, а в винапи вообще - функция GetShortPathName
« Последнее редактирование: 02-07-2019 10:32 от Алексей++ » Записан

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

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

« Ответ #14 : 02-07-2019 21:53 » 

1) Джон, по поводу ствоего замечания - это не отдельная строка, это я невнимательная... я не увидела. что при копировании кода я не до конца удалила ненужное...

Я так и думал. Ага

ИМХО, в силу

... если я запускаю своий батник напрямую из cmd-окна, то все работает,

всё работает, надо только внимательно всё проверить.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"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