2012-01-12 71 views
2

我从我的.NET应用程序启动一个shell脚本(.cmd)。脚本完成后,我希望控制台窗口保持打开状态,以便我可以检查是否有任何错误。我试着与cmd.exe /K:my.cmd,但由于某种原因,不起作用(该脚本没有得到执行)。即使是一个简单的“dir”命令也不起作用。任何其他想法?如何启动控制台应用程序并防止在最后关闭?

为了证明,这样的:

System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo() 
{ 
    Arguments = "/K:dir", 
    ErrorDialog = true, 
    FileName = "cmd.exe", 
    WorkingDirectory = @"C:\" 
}); 

给了我这样的:

C:\> 

新增澄清:我的应用程序(即启动脚本中的一个)是Windows窗体应用。执行上面的代码将打开一个新的控制台窗口(它应该)。我希望新的控制台窗口保持打开状态。另外,我无法修改脚本。这是一个自动构建脚本,它必须终止。

回答

2

我不知道这是否是问题的全部,你要是跑不过cmd /K:dir,什么都不是跑。使用空格而不是冒号使它适用于我。

cmd /K dir


这也是值得注意的是,你可以在运行对话框中测试这些命令。在任何最近的Windows版本中,都可以通过按住Win并按R来完成。

+0

这就是你在研究另一个程序的命令行之前尝试使用一个程序的命令行时得到的结果(我的情况是TortoiseSVN)。 :P – 2012-01-12 15:51:19

1

您可以将您的命令放在批处理(.bat)文件中,并使批处理文件中的最后一个命令“暂停”(不带引号)。然后,而不是执行cmd,而是执行批处理文件。

样品批处理文件 - test.bat的

DIR 暂停

你可以将查询结果输出到一个文本文件,然后显示您的应用程序中的文本文件。

DIR >results.txt 
+0

合理的,但也有很多这样的剧本,我不想写他们每个人单独.bat文件。我可以随时生成一个临时的.BAT文件......但这似乎是一个拙劣的解决方法。没有更好的方法吗? – 2012-01-12 14:00:28

+0

您可以将结果输出到文件,然后打开并显示该文件。 C:> DIR> dirResults.txt – 2012-01-12 17:50:26

0

我会将错误记录到文件中而不是保持窗口打开。 保持.NET控制台窗口打开添加

Console.ReadLine(); 

到结束,这将要求用户按Enter键继续。你也可以使用Console.ReadKey()使用任何键

,如果你想保持这个进程在Windows打开命令pause

+0

请参阅OP中的编辑。 – FakeRainBrigand 2012-01-12 14:01:49

1

从你的榜样删除冒号:

System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo() 
{ 
    Arguments = "/K dir", 
    ErrorDialog = true, 
    FileName = "cmd.exe", 
    WorkingDirectory = @"C:\" 
}); 
相关问题