asp въпрос

vasilev

Registered
дано се намери някой който разбира от asp :)

трябва да направя следното :
при натискане на бутон да се стартира test.cmd
да се изчака 30 секунди и след това да се прочете файл test.txt .

за момента видях как се чете файл но не намирам за предните две неща и как въобще се връзват като последователност ..
 
За пускането на програма:
http://msdn.microsoft.com/en-us/library/system.diagnostics.process(v=VS.90).aspx
По-специално този код трябва да ти свърши работа:
Код:
using System;
using System.Diagnostics;
using System.ComponentModel;

namespace MyProcessSample
{
    class MyProcess
    {
        public static void Main()
        {
            Process myProcess = new Process();

            try
            {
                myProcess.StartInfo.UseShellExecute = false;
                // You can start any process, HelloWorld is a do-nothing example.
                myProcess.StartInfo.FileName = "C:\\HelloWorld.exe";
                myProcess.StartInfo.CreateNoWindow = true;
                myProcess.Start();
                // This code assumes the process you are starting will terminate itself. 
                // Given that is is started without a window so you cannot terminate it 
                // on the desktop, it must terminate itself or you can do it programmatically
                // from this application using the Kill method.
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
        }
    }
}
Ако не работи сложи myProcess.StartInfo.UseShellExecute = true; иначе предполагам, че няма да знае как да отвори .cmd но не съм сигурен. Пробвай и по двата начина.

Сега за четенето на файла. Предполагам, че .cmd файла ти го генерира. Така както си го замислил да чака 30 сек. и да го чете после е най-лошия вариант. Първо в тези 30 секунди може да са го отворили още хора и вече информацията е невалидна и стара, второ 30 секунди са много време ако .cmd скрипта ти се изпълни бързо и са малко ако по някаква причина не успее за това време (което ме съмнява).

Та най-добрия вариант е да си пипнеш малко скрипта и да го направиш да не пише във файл ами просто да показва информацията, която ти трябва. Така с .net можеш да я прочетеш на момента, без да се налага да ползваш файлове за връзката. Ето ти пример за четене на нещата от процеса за cmd файла:
1. слагаш това
myProcess.StartInfo.RedirectStandardOutput = true; горе там преди myProcess.Start();
2. След myProcess.Start():
Код:
string output = myProcess.StandardOutput.ReadToEnd();
 myProcess.WaitForExit();
Първия ред прочита всичко върнато от процеса в стринга output, а втория ред казва на кода да спре и да изчака процеса да свърши преди да продължи надолу.
Така елиминирахме и нуждата от 30секундно чакане. Когато процеса спре, тогава ще продължи и скрипта ти.

Ако не можеш да промениш кода на .cmd файла тогава просто сложи myProcess.WaitForExit(); след старт-а и пак няма да се налага да чакаш фиксирано време, ами колкото му отнеме на процеса да свърши.

ПП. Тук има още инфо за четене от стандартния изход на процеси (това, което виждаш принтнато в конзолата) - http://msdn.microsoft.com/en-us/library/system.diagnostics.process.standardoutput(v=VS.90).aspx
 
благодаря ти !

идеята на това cmd е че то изпълнява команда от вида (отнася се за Websphere Application Server) - c:\ibm\...\bin\status.cmd server1 > test.txt

тоест идеята ми беше да запише статуса във текстов файл и аз да го прочета . но твоето решение е по-добро разбира се защото то директно ще изкара какво се случва без да се записват допълнителни файлове и да се прочитат.

а къде се слагат отварящите и затварящите тагове ?

Код:
<%@ Page Language="vb" %>
<%@ Import Namespace="System.IO" %>

всичкото това което ми даде съм сложил в
Код:
<script runat="server">
за да се стартира от бутон . правилно ли е?
 
Не съм работил директно с ASP, но начинът е същият, просто трябва да вземеш кода от Main() метода на горния клас и да си го нагодиш според контекста.

Най-добре е да си направиш един отделен клас само за тази цел и после при бутона само да извикаш метода.
 
..някой да сподели как да конвертирам този код на aspx ?
сигурно работи .. но не мога да го подкарам
 

Back
Горе