在没有分散控制台窗口的情况下在C#中启动进程

54 c# process

我想出了如何启动一个过程.但我现在的问题是控制台窗口(在这种情况下是7z)弹出最前面阻挡我的视线并移除我的焦点打断我的句子或每隔几秒钟做一次.它非常烦人,我如何防止这种情况发生.我认为CreateNoWindow解决了这个问题,但它没有.

注意:有时控制台需要用户输入(替换文件或不替换).所以完全隐藏它可能是个问题.

这是我目前的代码.

void doSomething(...)
{
    myProcess.StartInfo.FileName = ...;
    myProcess.StartInfo.Arguments = ...;
    myProcess.StartInfo.CreateNoWindow = true;
    myProcess.Start();
    myProcess.WaitForExit();
}
Run Code Online (Sandbox Code Playgroud)

Mun*_*Mun 85

如果我没记错的话,这对我有用

Process process = new Process();

// Stop the process from opening a new window
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.UseShellExecute = false;
process.StartInfo.CreateNoWindow = true;

// Setup executable and parameters
process.StartInfo.FileName = @"c:\test.exe"
process.StartInfo.Arguments = "--test";

// Go
process.Start();
Run Code Online (Sandbox Code Playgroud)

我一直在C#控制台应用程序中使用它来启动另一个进程,它会阻止应用程序在单独的窗口中启动它,而是将所有内容保存在同一个窗口中.

  • 很好的解释可以在这里找到:http://blogs.msdn.com/b/jmstall/archive/2006/09/28/createnowindow.aspx (7认同)
  • 这似乎会导致 `process.WaitForExit` 出现问题。我最终使用了`process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden`,这似乎工作正常。 (2认同)

小智 20

@galets在你的建议中,窗口仍然是创建的,只是它开始最小化.这对于实际做yogzombie24想要的更好:

myProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
Run Code Online (Sandbox Code Playgroud)


gal*_*ets 4

尝试这个:

myProcess.StartInfo.WindowStyle = ProcessWindowStyle.Minimized;
Run Code Online (Sandbox Code Playgroud)