Модераторы: Partizan, gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как вызвать Cи функцию system() в C# ? вызвать фунцию system() 
:(
    Опции темы
stan777
Дата 20.2.2007, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 145
Регистрация: 29.1.2007

Репутация: нет
Всего: нет



Мне шужно вызвать функцию system() как это сделать ? Не помню где она лежит кажется в kernel.dll

Добавлено @ 18:54 
Извеняюсь за вопрос, Process.Start("IExplore.exe"); нашел !
А как сделать что бы вызав консольных команд проходил без вызова консольного окна, например 
есля я сделал Process.Start("netstat","> file"); 
как сделать чтобы консольное окно не выскакивало ?
 

Это сообщение отредактировал(а) stan777 - 20.2.2007, 19:05
PM MAIL   Вверх
Yama
Дата 20.2.2007, 19:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 167
Регистрация: 2.8.2006

Репутация: 2
Всего: 2



Код

            ProcessStartInfo info = new ProcessStartInfo("netstat", "> file");
            info.WindowStyle = ProcessWindowStyle.Hidden;
            Process netstat = new Process();
            netstat.StartInfo = info;
            netstat.Start();

--------------------
Если бы строители строили дома так же, как программисты пишут программы, то первый же залетевший в форточку дятел разрушил бы всю нашу цивилизацию.
PM MAIL   Вверх
stan777
Дата 20.2.2007, 20:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 145
Регистрация: 29.1.2007

Репутация: нет
Всего: нет



Во Спасибо Щас и опробую !!!
PM MAIL   Вверх
Yama
Дата 20.2.2007, 21:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 167
Регистрация: 2.8.2006

Репутация: 2
Всего: 2



Пробуй  smile  . У меня работает smile .
--------------------
Если бы строители строили дома так же, как программисты пишут программы, то первый же залетевший в форточку дятел разрушил бы всю нашу цивилизацию.
PM MAIL   Вверх
stan777
Дата 21.2.2007, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 145
Регистрация: 29.1.2007

Репутация: нет
Всего: нет



Цитата(Yama @ 20.2.2007,  21:24)
Пробуй  smile  . У меня работает smile .

Да у меня тоже только теперь у меня это не работает, 

Код

 ProcessStartInfo info = new ProcessStartInfo("perl", args);
 info.WindowStyle = ProcessWindowStyle.Hidden;
 info.UseShellExecute =true;
 info.RedirectStandardOutput = true;
 Process getlink = new Process();
 getlink.StartInfo = info;
 getlink.Start();  //<- здесь выдает ошибку !?
 getlink.WaitForExit();
 string output = getlink.StandardOutput.ReadToEnd();


не могу понять что не наравится  ?
И как мне получить ифу что пока мой процесс работает , типа 
while(getlink.WaitForExit()){lable.text="работает ";}?
Просто как я добовляю hidden у меня не стартует процесс, а когда я удаляю просто с стандартым выводом, то немогу делать hidden !? 

Это сообщение отредактировал(а) stan777 - 21.2.2007, 11:18
PM MAIL   Вверх
mr.DUDA
Дата 21.2.2007, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Цитата(stan777 @  21.2.2007,  09:58 Найти цитируемый пост)
 new ProcessStartInfo("perl", args);

Полный путь надо прописать, и расширения .exe не хватает.


--------------------
user posted image
PM MAIL WWW   Вверх
Yama
Дата 21.2.2007, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 167
Регистрация: 2.8.2006

Репутация: 2
Всего: 2



Ну, во первых, какя ошибка вылетает?
Во вторых, ты сказал процессу, что переопределяешь стандартный оутпут, но не сказал, в какой поток ты его переопределяешь, + при переопределении стандартного оутпута надо ставить UseShellExecute в false smile
Имхо, лкоальный  мсдн:
Цитата

When a Process writes text to its standard stream, that text is normally displayed on the console. By redirecting the StandardOutput stream, you can manipulate or suppress the output of a process. For example, you can filter the text, format it differently, or write the output to both the console and a designated log file.

Note  
You must set UseShellExecute to false if you want to set RedirectStandardOutput to true. Otherwise, reading from the StandardOutput stream throws an exception.
 

The redirected StandardOutput stream can be read synchronously or asynchronously. Methods such as Read, ReadLine, and ReadToEnd perform synchronous read operations on the output stream of the process. These synchronous read operations do not complete until the associated Process writes to its StandardOutput stream, or closes the stream.

In contrast, BeginOutputReadLine starts asynchronous read operations on the StandardOutput stream. This method enables a designated event handler for the stream output and immediately returns to the caller, which can perform other work while the stream output is directed to the event handler.

Synchronous read operations introduce a dependency between the caller reading from the StandardOutput stream and the child process writing to that stream. These dependencies can result in deadlock conditions. When the caller reads from the redirected stream of a child process, it is dependent on the child. The caller waits on the read operation until the child writes to the stream or closes the stream. When the child process writes enough data to fill its redirected stream, it is dependent on the parent. The child process waits on the next write operation until the parent reads from the full stream or closes the stream. The deadlock condition results when the caller and child process wait on each other to complete an operation, and neither can proceed. You can avoid deadlocks by evaluating dependencies between the caller and child process.

The following C# code, for example, shows how to read from a redirected stream and wait for the child process to exit.



Добавлено @ 11:20 
Цитата(mr.DUDA @  21.2.2007,  11:14 Найти цитируемый пост)
Полный путь надо прописать, и расширения .exe не хватает. 

не надо, если путь к данному .exe файлу прописан в системе командой path.
--------------------
Если бы строители строили дома так же, как программисты пишут программы, то первый же залетевший в форточку дятел разрушил бы всю нашу цивилизацию.
PM MAIL   Вверх
stan777
Дата 21.2.2007, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 145
Регистрация: 29.1.2007

Репутация: нет
Всего: нет



зачем у меня же perl в перемееных среды есть. То есть сам процесс вызывается нормально, с этим проблем нет. 
1) а как узнать что запущенный процесс еще работает?
2) Вот когда так все работает и стандартный вывод пишит в lable
Код

Process getlink = new Process();
getlink.StartInfo.FileName="perl";
getlink.StartInfo.Arguments = " getlink "+url;
getlink.StartInfo.UseShellExecute = false;
getlink.StartInfo.RedirectStandardOutput = true;
getlink.Start();

Ну естественно здесь окно консоля не скрывается !
, а вот когда через ProccessStartInfo делаю Уже вот так
Код

Process myProcess = new Process();
ProcessStartInfo myProcessStartInfo = new ProcessStartInfo("perl",args);
myProcessStartInfo.WindowStyle = ProcessWindowStyle.Hidden;
myProcessStartInfo.UseShellExecute = false;
myProcessStartInfo.RedirectStandardOutput = true;
myProcess.StartInfo = myProcessStartInfo;
myProcess.Start();

StreamReader myStreamReader = myProcess.StandardOutput;
string myString = myStreamReader.ReadLine();
label1.Text=myString;
myProcess.Close();    
    

То в label1.Text пишется только первая строка из StandardOutput почему-то. И окно консоля вылазиет хотя ProcessWindowStyle.Hidden; имеется. Или нужно указать полный путь тогда будет все ок ?  


Это сообщение отредактировал(а) stan777 - 21.2.2007, 11:46
PM MAIL   Вверх
Yama
Дата 21.2.2007, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 167
Регистрация: 2.8.2006

Репутация: 2
Всего: 2



Попробуй так:
Код

info.UseShellExecute = false;
info.CreateNoWindow = true;//!!!
Process netstat = new Process();
netstat.StartInfo = info;
netstat.Start();

--------------------
Если бы строители строили дома так же, как программисты пишут программы, то первый же залетевший в форточку дятел разрушил бы всю нашу цивилизацию.
PM MAIL   Вверх
stan777
Дата 21.2.2007, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 145
Регистрация: 29.1.2007

Репутация: нет
Всего: нет



Код

Process myProcess = new Process();
            ProcessStartInfo myProcessStartInfo = new ProcessStartInfo("C:/perl/bin/perl.exe",args);
            //myProcessStartInfo.WindowStyle = ProcessWindowStyle.Hidden;
            myProcessStartInfo.CreateNoWindow = true; //Added
            myProcessStartInfo.UseShellExecute = false;
            myProcessStartInfo.RedirectStandardOutput = true;
            myProcess.StartInfo = myProcessStartInfo;
            myProcess.Start();

            StreamReader myStreamReader = myProcess.StandardOutput;
            string myString = myStreamReader.ReadLine();
            label1.Text=myString;
            myProcess.Close();

Вот тож самое ничего не изменилось !
PM MAIL   Вверх
Yama
Дата 21.2.2007, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 167
Регистрация: 2.8.2006

Репутация: 2
Всего: 2



Хм... странно... только что проыерил твой код c небольшими изменениями:
Код

            String args="127.0.0.1";
            Process myProcess = new Process();
            ProcessStartInfo myProcessStartInfo = new ProcessStartInfo("ping", args);
            //myProcessStartInfo.WindowStyle = ProcessWindowStyle.Hidden;
            myProcessStartInfo.CreateNoWindow = true; //Added
            myProcessStartInfo.UseShellExecute = false;
            myProcessStartInfo.RedirectStandardOutput = true;
            myProcess.StartInfo = myProcessStartInfo;
            myProcess.Start();

            StreamReader myStreamReader = myProcess.StandardOutput;
            string myString = myStreamReader.ReadToEnd();// ReadLine() changed to ReadToEnd();
            richTextBox1.Text += myString;//label1 changet to richtextBox1. У меня в проекте, в котором тестю, нету места для label :)
            myProcess.Close();

Выводит мне результат пинга в 1 строку, причем окошко консоли не появляется...
Вот результат smile :
Цитата

 Pinging 127.0.0.1 with 32 bytes of data:  Reply from 127.0.0.1: bytes=32 time<1ms TTL=128 Reply from 127.0.0.1: bytes=32 time<1ms TTL=128 Reply from 127.0.0.1: bytes=32 time<1ms TTL=128 Reply from 127.0.0.1: bytes=32 time<1ms TTL=128  Ping statistics for 127.0.0.1:     Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), Approximate round trip times in milli-seconds:     Minimum = 0ms, Maximum = 0ms, Average = 0ms 


Добавлено @ 14:35 
Может, это из-за того, что там какие-то настройки в самом перле? Или в аргументах что-то?
--------------------
Если бы строители строили дома так же, как программисты пишут программы, то первый же залетевший в форточку дятел разрушил бы всю нашу цивилизацию.
PM MAIL   Вверх
stan777
Дата 21.2.2007, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 145
Регистрация: 29.1.2007

Репутация: нет
Всего: нет



а у меня вот такой код


Код

Process myProcess = new Process();

        ProcessStartInfo myProcessStartInfo = new ProcessStartInfo("ping"," 127.0.0.1");
            //myProcessStartInfo.WindowStyle = ProcessWindowStyle.Hidden;
            myProcessStartInfo.CreateNoWindow = true; //Added
            myProcessStartInfo.UseShellExecute = false;
            myProcessStartInfo.RedirectStandardOutput = true;
            myProcess.StartInfo = myProcessStartInfo;
            myProcess.Start();

            StreamReader myStreamReader = myProcess.StandardOutput;
            string myString = myStreamReader.ReadLine();
            label1.Text=myString;
            myProcess.Close();


и он ничего не выдает в  label1.Text ! счего бы 

Это сообщение отредактировал(а) stan777 - 21.2.2007, 15:21
PM MAIL   Вверх
Yama
Дата 21.2.2007, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 167
Регистрация: 2.8.2006

Репутация: 2
Всего: 2



Цитата(Yama @  21.2.2007,  14:34 Найти цитируемый пост)
string myString = myStreamReader.ReadToEnd();// ReadLine() changed to ReadToEnd();

измени вот так. Выдаст результат.
у тебя так и открывается окно консоли при старте myProcess?
--------------------
Если бы строители строили дома так же, как программисты пишут программы, то первый же залетевший в форточку дятел разрушил бы всю нашу цивилизацию.
PM MAIL   Вверх
stan777
Дата 21.2.2007, 16:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 145
Регистрация: 29.1.2007

Репутация: нет
Всего: нет



А не знаешь как проверить работает запущенный процесс или нет
Просто мне нужно что-то наподобе 

Thread t = new Thread(new ThreadStart(ThreadProc));
t.Start();

While(t.Alive){
label1.Text ="working";
}


PM MAIL   Вверх
Yama
Дата 21.2.2007, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 167
Регистрация: 2.8.2006

Репутация: 2
Всего: 2



Цитата(stan777 @  21.2.2007,  16:17 Найти цитируемый пост)
Thread t = new Thread(new ThreadStart(ThreadProc));
t.Start();

While(t.Alive){
label1.Text ="working";
}

Во первых, это -  smile . Имхо, 1 тема, 1 вопрос. smile
Во вторых, этим кодом ты создашь поток внутри своего процесса.
В 3х, если ты знаешь Id нужного тебе процесса, то делаешь так:
Код

            String args="127.0.0.1";
            Process myProcess = new Process();
            ProcessStartInfo myProcessStartInfo = new ProcessStartInfo("ping", args);
            myProcessStartInfo.CreateNoWindow = true; //Added
            myProcessStartInfo.UseShellExecute = false;
            myProcessStartInfo.RedirectStandardOutput = true;
            myProcess.StartInfo = myProcessStartInfo;
            myProcess.Start();
.......
.......
.......

Process p=Process.GetProcessById(myProcess.Id);
if(p!=null) label1.Text="Process "+myProcess.ProcessName+" worked!";
else
label1.Text="Process "+myProcess.ProcessName+"not worked!";

--------------------
Если бы строители строили дома так же, как программисты пишут программы, то первый же залетевший в форточку дятел разрушил бы всю нашу цивилизацию.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0997 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.