隐藏System.Diagnostics.Process GUI窗口

时间:2012-09-04 13:44:21

标签: c# winscp

我真的在努力解决以下问题。我知道我的场景也有类似的问题,但不是它们完全相同的情况。

我创建了一个SSIS自定义组件,用于启动我想以静默方式运行的外部应用程序。无论我尝试什么,gui总会出现。如果我在控制台应用程序中使用相同的代码,我根本不会遇到任何问题。我在SSIS自定义组件(dll)和控制台应用程序之间可以看到的唯一区别是我的组件引用了System.Windows.Forms并使用了BIDS。我正在使用以下代码。任何我非常愿意尝试的提示。

Process winscp = new Process();

winscp.StartInfo.FileName = @stExe;
winscp.StartInfo.Arguments = "/log=";
winscp.StartInfo.UseShellExecute = false;
winscp.StartInfo.RedirectStandardInput = true;
winscp.StartInfo.RedirectStandardOutput = true;
winscp.StartInfo.CreateNoWindow = true; 

winscp.Start();

3 个答案:

答案 0 :(得分:0)

可以使用ShowWindow。您需要确保在创建过程窗口之后调用ShowWindow方法,而不是在启动过程中调用它。

[DllImport("user32.dll")]
static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);

出现过程窗口后调用以下命令。

ShowWindow(winscp.MainWindowHandle, 0)

答案 1 :(得分:0)

尝试找到新进程的窗口,尽快隐藏它。

使用Win32 API,

HWND hwnd = FindWindow(NULL, "Title");
ShowWindow(hwnd, SW_HIDE);

答案 2 :(得分:0)

当您运行WinSCP时:

  • 如果使用winscp.com,则CreateNoWindow应该在系统创建控制台窗口时起作用,因此CreateNoWindow可以控制
  • 如果使用winscp.exeCreateNoWindow不起作用,因为控制台窗口是由WinSCP本身创建的。但是您可以通过省略/console参数
  • 来强制WinSCP不创建窗口

详情请参阅:
https://winscp.net/eng/docs/executables