我真的在努力解决以下问题。我知道我的场景也有类似的问题,但不是它们完全相同的情况。
我创建了一个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();
答案 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.exe
,CreateNoWindow
不起作用,因为控制台窗口是由WinSCP本身创建的。但是您可以通过省略/console
参数