我真的很难解决以下问题。我知道我的场景中有类似的问题,但没有一个是完全相同的场景。
我创建了一个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