.net WinForm能否执行控制台程序?如果是,怎么做?

.net WinForm能否执行控制台程序?如果是,怎么做?,.net,command-line,.net,Command Line,我有一个免费的命令行工具叫做。效果很好。以下是我在控制台窗口中输入的示例行:- ogr2ogr -f "ESRI Shapefile" -a_srs "EPSG:26986" -t_srs "EPSG:4326" towns_geodetic.shp TOWNSSURVEY_POLY.shp 我希望根据我动态生成的一些列表(我使用Linq-to-Filesystem并获取所有文件名)将最后一个参数改为参数,然后调用这个程序“n

我有一个免费的命令行工具叫做。效果很好。以下是我在控制台窗口中输入的示例行:-

ogr2ogr -f "ESRI Shapefile" -a_srs "EPSG:26986" -t_srs "EPSG:4326"
    towns_geodetic.shp TOWNSSURVEY_POLY.shp
我希望根据我动态生成的一些列表(我使用Linq-to-Filesystem并获取所有文件名)将最后一个参数改为参数,然后调用这个程序“n”次

我不在乎产量

这能做到吗

这都是在.NET环境下进行的

编辑 还有什么方法可以确保代码等待进程完成吗?

使用。类似于

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" );
使用。类似于

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" );
我们走了,我的朋友

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

我们走吧,朋友

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


我会对此采取更详细的方法,并做类似的事情

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

至少在我看来,这样的内容更具可读性。

我会对此采取更详细的方法,并做类似的事情

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

至少在我看来,这样的内容更具可读性。

值得注意的是,Process.Start()可以接受各种简洁的参数。传递一个URL,它将使用默认的web浏览器打开页面。传递一个mailto:链接,它将使用默认的邮件客户端打开一封新的电子邮件。它非常有用。值得注意的是,Process.Start()可以接受各种简洁的参数。传递一个URL,它将使用默认的web浏览器打开页面。传递一个mailto:链接,它将使用默认的邮件客户端打开一封新的电子邮件。它很有用。这是同步的吗?因此,如果我循环(其中u表示开始循环/结束循环),它是否会等待进程完成(在第process.start(..)行),然后再转到下一行?不,它不会等待进程完成,为此,您需要输入一个oStartInfo.WaitForExit();在进程之后调用。如果希望它等待,请启动。最后,是否可以在单个“进程”中“链接”命令?目前,当我打开这个特殊的控制台窗口时,我有一个运行bat文件的快捷方式。它包含路径和额外的“准备”垃圾。可以先调用它(C:\Windows\system32\cmd.exe/K“C:\Program Files(x86)\FWTools2.3.0\setfw.bat)然后调用我的唯一程序(ogr2ogr)吗?所有这些都在同一个“进程”中吗?我只需将您的单个调用添加到.bat文件中,然后一次完成所有调用。这是同步的吗?如果我循环(你说的开始循环/结束循环),它是否会等待进程完成(在第process.Start(..)行),然后再转到下一行?不,它不会等待进程完成,为此,您需要输入一个oStartInfo.WaitForExit();在进程后调用。如果希望它等待,请启动。最后,是否可以在单个“进程”中“链接”命令?当前,当我打开此特殊控制台窗口时,我有一个运行bat文件的快捷方式。它包含路径和额外的“准备”垃圾。是否可以先调用它(C:\Windows\system32\cmd.exe/K“C:\Program Files(x86)\FWTools2.3.0\setfw.bat),然后是我的唯一程序(ogr2ogr)秒。。。都在同一个“过程”中?我只需将您的单个调用添加到.bat文件中,然后一次完成所有操作。另请参见:另请参见: