我正在.Net中编写命令行应用程序。应用程序本身非常简单,但它必须同步连接到Web服务,而Web服务又必须连接到Oracle数据库,那些部分喜欢花时间。
是否有一种直截了当的方式(不将我的app exe分成两部分)继续执行但是仍然会执行到命令提示符?
这是Windows,所以没有“&”。另外,我无法使用cmd.exe的“start”cmdlet。
答案 0 :(得分:6)
如果没有从您的应用程序运行后台进程,我不相信这是可能的。但是,一个相当干净的方法可能是修改你的Main方法,如下所示:
static void Main(string[] args)
{
if (args.Length > 0 && args[0] == "run")
{
//actually run your application here
}
else
{
//create another instance of this process
ProcessStartInfo info = new ProcessStartInfo();
info.FileName = Assembly.GetExecutingAssembly().Location;
info.Arguments = "run";
info.UseShellExecute = false;
info.CreateNoWindow = true;
Process.Start(info);
}
}
无论如何,只要把它写在我的头顶上。基本上,它创建了同一个可执行文件的新实例,但是新进程看到了“run”命令行参数并完成了工作,而不是生成一个新实例。设置我“应该”的选项也允许生成的进程打印到现有的控制台。
答案 1 :(得分:3)
您的应用可以使用其他参数启动本身的第二个实例。因此,如果您运行“MyApp param1 param2”,那么它将启动“MyApp -synch param1 param2”并终止。第二个实例看到“-synch”参数并完成工作。
作为一个轻微的替代方案,运行“MyApp p1 p2”实际上可以正常工作(同步),但是如果你运行“MyApp -asynch p1 p2”,它会启动“MyApp p1 p2”并终止。
这是两个过程,但至少它只有一个exe
答案 2 :(得分:0)
不,鉴于你的限制,我不相信这是可能的。您可以选择保留控制权,或者(如您所述)将应用程序划分为两个,以便初始可执行文件只是一个实例化主程序然后返回的填充程序。