运行带有WebBrowser控件的.NET C#WinForms应用程序的SQL代理作业。正在尝试发送关键点笔划

运行带有WebBrowser控件的.NET C#WinForms应用程序的SQL代理作业。正在尝试发送关键点笔划,c#,winforms,webbrowser-control,sendkeys,sql-agent-job,C#,Winforms,Webbrowser Control,Sendkeys,Sql Agent Job,正如标题所示,我有一个带有WebBrowser控件的.NETC#Winforms应用程序。我用它从一个网站下载一个(动态生成的)Excel文件,它工作得很好。我必须按照雇主的要求使用网络控制 当我使用SQL代理作业运行带有执行进程任务的SSIS包来执行应用程序时,它会失败(如文件未下载)。如果我运行SSIS包,它将正常工作。区别在于应用程序窗口未显示的SQL作业 当WebBrowser控件显示“打开-下载-关闭”对话框时,我发送按键(Alt+S)以保存文件,然后关闭对话框。当SQL作业运行应用程

正如标题所示,我有一个带有WebBrowser控件的.NETC#Winforms应用程序。我用它从一个网站下载一个(动态生成的)Excel文件,它工作得很好。我必须按照雇主的要求使用网络控制

当我使用SQL代理作业运行带有执行进程任务的SSIS包来执行应用程序时,它会失败(如文件未下载)。如果我运行SSIS包,它将正常工作。区别在于应用程序窗口未显示的SQL作业

当WebBrowser控件显示“打开-下载-关闭”对话框时,我发送按键(Alt+S)以保存文件,然后关闭对话框。当SQL作业运行应用程序时,按键永远不会到达WebBrowser

我尝试过使用SendKeys.SendWait发送按键,还尝试过使用User32 dll获取对话框和按钮句柄,然后使用SendMessage/PostMessage(尝试了两者)发送按键笔划。这两种方法都可以作为exe和SSIS包正常工作。在运行SQL作业时,这两种方法都会失败

我还尝试过按照建议覆盖下载管理器,但没有成功。老实说,当执行达到覆盖的下载方法时,我不知道如何获得应用程序必须下载的动态生成的Excel文件。调试下载方法时得到的链接不是指向文件的链接

/// <summary>
/// Return S_OK (0) so that IE will stop to download the file itself. 
/// Else the default download user interface is used.
/// </summary>
public int Download(IMoniker pmk, IBindCtx pbc, uint dwBindVerb, int grfBINDF, IntPtr pBindInfo,
                    string pszHeaders, string pszRedir, uint uiCP)
{
    // Get the display name of the pointer to an IMoniker interface that specifies the object to be downloaded.
    string name;
    pmk.GetDisplayName(pbc, null, out name);
    if (!string.IsNullOrEmpty(name))
    {
        Uri url;
        if (Uri.TryCreate(name, UriKind.Absolute, out url))
        {
            if ( FileDownloading != null )
            {
                 FileDownloading(this, new FileDownloadEventArgs(url));
            }
            return Constants.S_OK;
        }
    }
    return 1;
}
如果需要,我可以提供应用程序代码

任何帮助都将不胜感激。请原谅我英语不好


这听起来很傻。为什么您必须使用web控件下载并立即保存网页?因为SQL代理是作为服务运行的,所以尝试使用windows窗体应用程序会让您头疼


我要么创建一个单独的非交互式控制台应用程序来进行下载和保存,要么如果重用性是动机——将应用程序分成两部分:一个exe与windows窗体,另一个exe与下载逻辑。第一个exe可以引用另一个exe来访问它的公共类。

这听起来很傻。为什么您必须使用web控件下载并立即保存网页?因为SQL代理是作为服务运行的,所以尝试使用windows窗体应用程序会让您头疼


我要么创建一个单独的非交互式控制台应用程序来进行下载和保存,要么如果重用性是动机——将应用程序分成两部分:一个exe与windows窗体,另一个exe与下载逻辑。第一个exe可以引用另一个exe来访问它的公共类。

这很愚蠢。不幸的是,我不允许在开发机器中使用Fiddler,并且我被要求使用WebBrowser类。我试图实现这个解决方案,但我有点卡住了:这很愚蠢。不幸的是,我不允许在开发机器中使用Fiddler,并且我被要求使用WebBrowser类。我正在尝试实施此解决方案,但我有点卡住了:
Content-Disposition: attachment; filename="file.xlsx"

Content-Transfer-Encoding: binary

Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet