0 / 0 / 0
Регистрация: 22.02.2009
Сообщений: 3
1

Запуск командной строки из кода программы

02.03.2009, 00:25. Показов 14068. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Пишу свою среду разработки программ на Ассемблере.
Код из РичТекстБокса сохраняю в текстовый файл с расширением .asm

Столкнулся с такой проблемой:
Необходимо запустить nasm с командной строки с параметрами.
Пример: "путь к nasm.exe" -f bin "путь к asm-файлу" -o "путь к com-файлу где я хочу его создать"

(В пути к компилятору и к самой программе есть кончено же русские директории.)

Таким образом(исходя из существования файла Temporary1.asm):
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
25
26
            Path = Application.StartupPath + "\\"
                                   + "Temporary" + "\\";
            PathCompiler = Application.StartupPath + "\\nasm\\nasm.exe";
            NameFile = "Temporary1";
            ArgCompiler = " -f bin " + Path + NameFile + ".asm"
                + " -o " + Path + NameFile + ".com" + " -l " + Path + NameFile + ".lst";
 
            string i = PathCompiler;  
            if (!System.IO.File.Exists(i))
            {
                MessageBox.Show("Nasm не установлена!", "", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            try
            {
                System.Diagnostics.Process p = new System.Diagnostics.Process();
                p.EnableRaisingEvents = false;
                p.StartInfo.FileName = i;
                p.StartInfo.Arguments = ArgCompiler; //(Аргументы командной строки)
                p.Start();
                p.WaitForInputIdle();
            }
            catch
            {
                MessageBox.Show("Nasm не запускается!", "", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
Ничего не выходит.
Надеюсь на вашу помощь.
Заранее Благодарю.

Добавлено через 1 час 54 минуты 11 секунд
Появились мысли что пути к файлам нужно преобразовать в короткие имена MS-DOS (в соответствии с соглашением об именах файлов 8.3)

Какими средствами C# необходимо воспользоваться, чтоб перевести обычные пути к файлам в короткие пути MS-DOSа?
0
IT_Exp
Эксперт
8794 / 1073 / 104
Регистрация: 17.06.2006
Сообщений: 12,602
Блог
02.03.2009, 00:25
Ответы с готовыми решениями:

Запуск программы из командной строки
Можно ли как-то ограничить вводимые аргументы? Функция static void Main(string args) должна...

Запуск графической программы с параметрами из командной строки
Пишу примитивный нотифер, нужно что бы через консоль можно было передавать текст в label и listbox....

Запуск программы из командной строки
не могу запустить програму из командной строки код package ppl; class El { double...

Запуск программы из командной строки
Здравствуйте. Подскажите, как запустить следующею программу из командной строки? #include...

4
1923 / 428 / 41
Регистрация: 12.07.2007
Сообщений: 2,062
02.03.2009, 02:34 2
Цитата Сообщение от couatl Посмотреть сообщение
Ничего не выходит.
Что значит ничего не выходит? Ошибка или что?
Попробуйте относительные пути, а не абсолютные.
0
0 / 0 / 0
Регистрация: 22.02.2009
Сообщений: 3
02.03.2009, 22:51  [ТС] 3
http://lh6.ggpht.com/_3-KNyrxy... /Error.jpg

Вот такое. Причем почти постоянно.

Дело скорее всего не в русских путях к папкам и не в пробелах, так как бросал в корень диска C: и в корень с программой. Пробовал ставить в кавычки пути к файлам, но безрезультатно - "Ошибка при поиске программы. Программа не найдена."

Та же ошибка, если я пытаюсь запускать так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
            string PathCompiler = "C:\\nasm\\nasm.exe";
            string ArgCompiler = "-f bin C:\\nasm\\hello1.asm -o C:\\nasm\\hello1.com";
            Console.WriteLine(PathCompiler);
            Console.WriteLine(ArgCompiler);
 
            Process process = new Process();
 
            process.StartInfo.FileName = PathCompiler;
            process.StartInfo.Arguments = ArgCompiler;
            process.StartInfo.CreateNoWindow = true;
            process.StartInfo.UseShellExecute = false;
 
            process.Start();
            
            Console.ReadKey();
и так

C#
1
            System.Diagnostics.Process.Start(PathCompiler, ArgCompiler);
Конечно же все продемонстрированные выше пути существуют.

Добавлено через 28 минут 58 секунд
Я вообще не знаю что тут твориться:
Примеры работы с winamp'ом
1. Сработал
C#
1
2
3
            string PathCompiler = "C:\\Programs\\Winamp\\winamp.exe";
            string ArgCompiler = "D:\\Celtic.m3u";
            System.Diagnostics.Process.Start(PathCompiler, ArgCompiler);
2. Сработал
C#
1
2
3
            string PathCompiler = "C:\\Programs\\Winamp\\winamp.exe";
            string ArgCompiler = "D:\\Музыка\\Celtic.m3u";
            System.Diagnostics.Process.Start(PathCompiler, ArgCompiler);
3. Не сработал, точно из-за пробелов
C#
1
2
3
            string PathCompiler = "C:\\Programs\\Winamp\\winamp.exe";
            string ArgCompiler = "D:\\Музыка лала\\Celtic.m3u";
            System.Diagnostics.Process.Start(PathCompiler, ArgCompiler);
Пробовал с блокнотам - сработало
C#
1
2
            string PathCompiler = "C:\\notepad.exe";
            System.Diagnostics.Process.Start(PathCompiler);
Пробы с nasm.exe и debug.exe - не сработал ни один. Все та же ошибка.
1.
C#
1
2
            string PathCompiler = "C:\\nasm.exe";
            System.Diagnostics.Process.Start(PathCompiler);
2.
C#
1
2
            string PathCompiler = "C:\\debug.exe";
            System.Diagnostics.Process.Start(PathCompiler);
Добавлено через 1 час 1 минуту 48 секунд
0
1923 / 428 / 41
Регистрация: 12.07.2007
Сообщений: 2,062
03.03.2009, 02:51 4
Предпологаю, что эта ошибка генерируется самим nasm.exe, т.к. ему не хватает параметров. При ручном запуске из консоли с этими параметрами работает?
Можно попробовать установить свойство ProcessStartInfo.WorkingDirectory.

Попробуйте к путям добавлять кавычки:
Код
string ArgCompiler = "\"D:\\Музыка лала\\Celtic.m3u\"";
0
0 / 0 / 0
Регистрация: 22.02.2009
Сообщений: 3
03.03.2009, 19:47  [ТС] 5
Да, спасибо, кавычки помогли для директорий с пробелами.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
                  string PathCompiler = "C:\\nasm.exe";
                  string ArgCompiler = "-f bin C:\\1.asm -o C:\\1.com";
                  Console.WriteLine(PathCompiler);
                  Console.WriteLine(ArgCompiler);
                  Process process = new Process();
 
                  process.StartInfo.FileName = PathCompiler;
                  process.StartInfo.Arguments = ArgCompiler;
                  process.StartInfo.CreateNoWindow = true;
                  process.StartInfo.UseShellExecute = false;
                  process.StartInfo.WorkingDirectory = "C:\\";
 
                  process.Start();
16-разрядная подсистема MS-DOS
C:\WINDOWS\system32\ntvdm.exe
Ошибка настройки среды для приложения. Для завершенияработы приложения нажмите кнопку "Закрыть".

Добавлено через 38 минут 49 секунд
Наконец я её победил.
Натолкнулся на такой вариант запуска.
C#
1
2
3
4
5
6
7
8
                  string PathCompiler = "C:\\nasm.exe";
                  string ArgCompiler = "-f bin C:\\1.asm -o C:\\1.com";
                  
                  ProcessStartInfo processStartInfo = new ProcessStartInfo(PathCompiler);
                  processStartInfo.WorkingDirectory = "C:\\";
                  processStartInfo.CreateNoWindow = true;
                  processStartInfo.Arguments = ArgCompiler;
                  Process.Start(processStartInfo);
Не знаю, чем он так отличается от всех стальных, но у меня он замечательно работает. Если кто-нибудь знает отчего так, буду рад послушать.

Собственно теперь появился иной вопрос.
Иногда при компиляции программ на ассемблере nasm выводит ошибки (если они имеются в написанном коде программы на ассемблере).
Как в данном случае (так как другие не работают) после запуска приложения в командной строке с аргументами считать все, что выводится в командной строке.

Добавлено через 42 минуты 23 секунды
И ещё вопрос.
Две пробы скомпилить на nasm'е из командной строки. (командной строки - !!! а не из программы на си-шарпе)


"C:\Новая(2)\nasm.exe" -f bin "C:\Новая\1.asm" -o "C:\Новая\1.com"
"C:\Новая папка (2)\nasm.exe" -f bin "C:\Новая папка\1.asm" -o "C:\Новая папка\1.com"

Первый работает, второй нет. "Не удается выполнить C:\Новая папка (2)\nasm.exe"
хотя "C:\Новая папка (2)\notepad.exe" - запускает
и "C:\Новая папка (2)\notepad.exe" "C:\Новая папка\Без.txt" - запускает

Как это исправить?
0
03.03.2009, 19:47
BasicMan
Эксперт
19315 / 2622 / 84
Регистрация: 17.02.2009
Сообщений: 10,364
Блог
03.03.2009, 19:47
Помогаю со студенческими работами здесь

Запуск программы с параметрами с командной строки
Добрый день. Хочу решить простую задачу. Пользователь должен запустить программу с параметрами с...

Запуск внешней программы из Командной строки
Антиврусная утиль McAfee Stinger. В хелпе обнаружил возможность ее запуска из командной строки....

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

Запуск программы из командной строки от имени администратора
Здравствуйте. В винде есть возможность при запуске приложения запрашивать подтверждение...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

Блоги программистов
Как использовать GraphQL в C# с HotChocolate
Programming 05.01.2025
GraphQL — это современный подход к разработке API, который позволяет клиентам запрашивать только те данные, которые им необходимы. Это делает взаимодействие с API более гибким и эффективным по. . .
Модель полного двоичного суматора с помощью логических операций (python)
AlexSky-coder 04.01.2025
def binSum(x:list, y:list): s=^y] p=x and y for i in range(1,len(x)): s. append((x^y)^p) p=(x and y)or(p and (x or y)) return s x=list() y=list()
Это мы не проходили, это нам не задавали...(шес­­­­­­­­­­­­­­­ти­б­и­т­н­ы­й асихронный счётчик с управляющим сигналом заде
Hrethgir 04.01.2025
Асинхронный счётчик на сумматорах (шестиразрядный по числу диодов на плате, но наверное разрядов будет больше - восемь или шестнадцать, а диоды на старшие), так как триггеры прошли тестирование и. . .
Руководство по созданию бота для Телеграм на Python
IT_Exp 04.01.2025
Боты для Телеграм представляют собой автоматизированные программы, которые выполняют различные задачи, взаимодействуя с пользователями через интерфейс мессенджера. В данной статье мы рассмотрим,. . .
Применение компонентов PrimeVue в Vue.js 3 на TypeScript
BasicMan 04.01.2025
Введение в PrimeVue и настройка окружения PrimeVue представляет собой мощную библиотеку компонентов пользовательского интерфейса для Vue. js 3, которая предоставляет разработчикам богатый набор. . .
Как стать Senior developer
cpp_developer 04.01.2025
В современной индустрии разработки программного обеспечения позиция Senior Developer представляет собой не просто следующую ступень карьерной лестницы, а качественно новый уровень профессионального. . .
Что известно о дате выхода Windows 12 и чего от нее ждать
IT_Exp 04.01.2025
В мире технологий постоянно происходят изменения, и операционные системы не являются исключением. Windows 11, выпущенная в октябре 2021 года, принесла множество инноваций и улучшений, но. . .
Что новенького в .NET Core 9
Programming 04.01.2025
Обзор ключевых изменений в . NET Core 9 Платформа . NET Core продолжает активно развиваться, и версия 9 представляет собой значительный шаг вперед в эволюции этой технологии. Новый релиз. . .
Инструкция по установке python3.13.1 в Debian 12
AlexSky-coder 03.01.2025
sudo apt update sudo apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev wget. . .
Затестил триггеры. архив проекта прилагаю с GOA файлами в настройках архиватора проектов.
Hrethgir 03.01.2025
В этот раз нет закольцованности, потому что от неё только глюки, как я понял, логика не вырезанная. Триггеры очень быстрые если верить измерениям с помощью анализатора от Gowin. Есть ещё регистры,. . .
Python в помощь DevOps
IT_Exp 03.01.2025
Причины использования Python в работе DevOps Python стал неотъемлемой частью мира DevOps, и это не случайно. Этот язык программирования обладает множеством преимуществ, которые делают его. . .
Angular vs React vs Vue.js
BasicMan 03.01.2025
О, друзья-разработчики и просто любопытные читатели! Сегодня мы отправимся в увлекательное путешествие по миру фронтенд-разработки, и первой остановкой станет Angular – этакий строгий немецкий. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru