Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/74: Рейтинг темы: голосов - 74, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 22.02.2009
Сообщений: 3
1

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

02.03.2009, 00:25. Показов 14059. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.03.2009, 19:47
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru