隐藏系统.诊断.进程GUI窗口



我真的很难解决以下问题。我知道我的场景中有类似的问题,但没有一个是完全相同的场景。

我创建了一个SSIS自定义组件,该组件启动了一个要在静默模式下运行的外部应用程序。无论我尝试什么,gui总是出现。如果我在控制台应用程序中使用相同的代码,我就不会遇到任何问题。我能看到的SSIS自定义组件(dll)和控制台应用程序之间的唯一区别是,我的组件引用了System。Windows。形成并使用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();

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

使用Win32 API、

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

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

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

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

ShowWindow(winscp.MainWindowHandle, 0)

当您运行WinSCP:时

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

有关详细信息,请参阅:
https://winscp.net/eng/docs/executables

最新更新