1

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

我创建了一个 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();
4

3 回答 3

0

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

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

出现处理窗口后调用以下命令。

ShowWindow(winscp.MainWindowHandle, 0)
于 2012-09-04T14:12:29.980 回答
0

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

使用 Win32 API,

HWND hwnd = FindWindow(NULL, "Title");
ShowWindow(hwnd, SW_HIDE);
于 2012-09-04T14:13:42.870 回答
0

在运行 WinSCP 时:

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

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

于 2013-04-03T14:02:08.247 回答