Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: CMD Добавлено: 23.03.10 14:12  

Автор вопроса:  VβÐUηìt | Web-сайт: смекаешь.рф
Задача предельно проста: есть командная произвольная строка с параметрами. Можт не быть адреса, может и быть, может быть с расширением, а может и без,может в кавычках, а может и без. Нужно тупо это запустить :) С параметрами. Щас я беру строку, нахожу в ней файл, нахожу параметры, создаю процесс с этими параметрами и запускаю.
Чтобы узнать путь к проге набросал такую расту:
     private static string GetProgram(string uc)
        {
            if (uc.Length == 0) return "";
            string UninstallerPath = uc.Trim();
            string result = "";
            bool noexe = false;
            bool nodisk = false;
            int i = 0;
            if (UninstallerPath[0] == '\"')
            {
                result = UninstallerPath.Substring(1, UninstallerPath.IndexOf('\"', 3) - 1);
                if (result.IndexOf(',') > -1)
                    result = result.Substring(0, result.IndexOf(',') - 1);
            }
            else
                result = UninstallerPath.ToLower();

            if (result.IndexOf(".exe") == -1) noexe = true;
            if (UninstallerPath[1] != ':') nodisk = true;
            if (!noexe)
                result = result.Substring(0, result.IndexOf(".exe") + 4);
            if (noexe)
                result += ".exe";
            if (nodisk)
                result = Environment.SystemDirectory + "\\" + result;


            return result;
        }

С параметрами как быть? Так же криво через попу их искать? И вообще, чувствуется, что в .NET это делается, мягко говоря проще :)

Заранее благодарен.

Ответить

  Ответы Всего ответов: 8  

Номер ответа: 1
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #1 Добавлено: 23.03.10 14:52
Познай System.IO.Path и с путями,расширениями,папками,названиями файлов и прочей лабудой станет легче.. а вот с параметрами тут уж кто во что горазд... Стандартного ничего нет.. регулярки,парсинг и т.д..

Обычно достаточно использовтаь Split чтоб получить набор ключей параметром.. а дальше уж разберешься..

Ответить

Номер ответа: 2
Автор ответа:
 VβÐUηìt



Вопросов: 246
Ответов: 3333
 Web-сайт: смекаешь.рф
 Профиль | | #2
Добавлено: 23.03.10 14:57
Сенкс

Ответить

Номер ответа: 3
Автор ответа:
 VβÐUηìt



Вопросов: 246
Ответов: 3333
 Web-сайт: смекаешь.рф
 Профиль | | #3
Добавлено: 23.03.10 22:14
Эм... Расты, тут все намного проще))
  1.  
  2. [DllImport("kernel32")]
  3. static extern uint WinExec(string lpCmdLine, uint uCmdShow);


Как я сразу не догадался)

Ответить

Номер ответа: 4
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #4 Добавлено: 24.03.10 08:29
Ппц.. Вася, ты чего творишь? Нах тебе эта шляпа вообще сдалась?? Тебе надо стартануть процесс с параметрами? Ну так и скажи.. вроде не первый год на форуме а нормально задать вопрос не можешь..


public static System.Diagnostics.Process Start(string fileName, string arguments)
    Member of System.Diagnostics.Process

Summary:
Starts a process resource by specifying the name of an application and a set of command-line arguments, and associates the resource with a new System.Diagnostics.Process component.

Parameters:
fileName: The name of an application file to run in the process.
arguments: Command-line arguments to pass when starting the process.


Если надо управлять окном консоли.. скрытым сделать или еще чего то юзай другой конструктор с ProcessStartInfo Там можно что угодно сделать.. вплоть до того что перехватить stdIn.stdOut и т.д.. кроме того так же можно подписаться на нужные события, дождаться окончания завершение того процесса либо пусть работает ассинхронно и т.д..

Только не пиши тут больше такую шляпу.. не надо..

Ответить

Номер ответа: 5
Автор ответа:
 VβÐUηìt



Вопросов: 246
Ответов: 3333
 Web-сайт: смекаешь.рф
 Профиль | | #5
Добавлено: 24.03.10 16:51
Фишка не в том, что надо стартануть процесс с параметрами, а в том, что эти параметры, мать их, в одну строку написаны (ибо считаны с реестра). Их надо разделять (ужасный черезжопупарсинг), а потом уже подсовывать вышеописанной тобой расте. И меня, кстати очень удивило, что в винде для этого нет оддельной функции (вроде).

Ответить

Номер ответа: 6
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #6 Добавлено: 25.03.10 15:05
а в том, что эти параметры, мать их, в одну строку написаны

что то я недогоняю твоих проблем.. эти параметры и надо передвать одной строкой!!
  1. Process process = Process.Srart(@"C:\name.exe", "-p -t /k");


ты чего там вообще мудришь?

Ответить

Номер ответа: 7
Автор ответа:
 VβÐUηìt



Вопросов: 246
Ответов: 3333
 Web-сайт: смекаешь.рф
 Профиль | | #7
Добавлено: 25.03.10 15:16
Параметры там вместе с именем файла в одной строке. Ну тобиш не
  1. "C:\name.exe", "-p -t /k"

а
  1. "C:\name.exe -p -t /k"

.
Такое Process.Start не понимает

Ответить

Номер ответа: 8
Автор ответа:
 VβÐUηìt



Вопросов: 246
Ответов: 3333
 Web-сайт: смекаешь.рф
 Профиль | | #8
Добавлено: 25.03.10 15:41
И там еще совсем ужас бывает такого рода:
  1.  
  2. rundll32 "C:\progra~\adobe~\unins~.exe",LaunchSetup -I\34{блаблабла}


А такой ужос парсить страшно. Лучше банальным WinExec.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам