如何使无窗口/命令行应用程序返回但继续在后台执行?

时间:2011-02-15 12:12:18

标签: c# .net vb.net

我正在.Net中编写命令行应用程序。应用程序本身非常简单,但它必须同步连接到Web服务,而Web服务又必须连接到Oracle数据库,那些部分喜欢花时间。

是否有一种直截了当的方式(不将我的app exe分成两部分)继续执行但是仍然会执行到命令提示符?

这是Windows,所以没有“&”。另外,我无法使用cmd.exe的“start”cmdlet。

3 个答案:

答案 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)

不,鉴于你的限制,我不相信这是可能的。您可以选择保留控制权,或者(如您所述)将应用程序划分为两个,以便初始可执行文件只是一个实例化主程序然后返回的填充程序。