Может ли WinForm выполнить консольную программу? Если так, то как? - PullRequest
1 голос
/ 01 мая 2009

У меня есть бесплатный инструмент командной строки под названием FW Tools . Работает отлично. Вот пример строки, которую я ввожу в окне консоли: -

ogr2ogr -f "ESRI Shapefile" -a_srs "EPSG:26986" -t_srs "EPSG:4326"
    towns_geodetic.shp TOWNSSURVEY_POLY.shp

Я хочу изменить последний аргумент на основе некоторого списка, который я динамически генерирую (я использую Linq-to-Filesystem и собираю все имена файлов), а затем вызываю эту программу n раз.

Мне плевать на вывод.

Можно ли это сделать?

Кстати, все это в среде .NET.

EDIT

Есть ли способ убедиться, что код ожидает завершения процесса?

Ответы [ 3 ]

6 голосов
/ 01 мая 2009

Я бы взял более подробный подход к этому и сделал бы что-то вроде этого

string ApplicationName = "ogr2ogr";
string BaseOptions = "-f \"ESRI Shapefile\" -a_srs \"EPSG:26986\" 
                      -t_srs \"EPSG:4326\"";

//Start your loop here
ProcessStartInfo oStartInfo = new ProcessStartInfo()
oStartInfo.FileName = ApplicationName;
oStartInfo.Arguments = BaseOptions + MyLoopLoadedItemsHere;
Process.Start(oStartInfo)

//If you want to wait for exit, uncomment next line
//oStartInfo.WaitForExit();

//end your loop here

Что-то вроде этого немного более читабельно, по крайней мере, на мой взгляд.

5 голосов
/ 01 мая 2009

Использование Process.Start . Что-то вроде ...

Process.Start( "cmd /c Gregory -f \"ES RI Shape file\" 
      -a_Sirs \"PEGS:26986\" -t_Sirs \"PEGS:4326\"
      towns_geodetic.Shep TOWNS SURVEY_PLOY.Shep" );

Вот несколько примеров, как сделать это немного чище.

1 голос
/ 01 мая 2009

Вот и мы, мой друг

Process.Start(@"C:\Windows\notepad.exe", @"C:\Windows\system.ini");

или

System.Diagnostics.Process.Start(@"C:\Windows\notepad.exe", 
                                 @"C:\Windows\system.ini");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...