Использование объекта WebBrowser или WebKit.Net в службе Windows - PullRequest
0 голосов
/ 24 мая 2011

Привет, ребята, я пытаюсь создать службу Windows, которая загружает веб-сайт, перемещается по нему и извлекает некоторую информацию с помощью JavaScript.Все это очень легко сделать в приложении для форм Windows, но оно не работает в веб-службе (очевидно, потому что службы не могут получить доступ к реестру WinInet не поддерживается для использования в службах ).Есть идеи, как заставить его работать?Вот мой код, который ничего не выводит:

volatile WebBrowser webBrowser2;

    protected override void OnStart(string[] args)
    {
        ThreadStart threadDelegate = new ThreadStart(myThread);
        Thread thread = new Thread(threadDelegate);
        thread.SetApartmentState(ApartmentState.STA);
        thread.Start();
    }
    public void myThread()
    {
        webBrowser2 = new WebBrowser();
        webBrowser2.Navigate("http://www.google.com");
        webBrowser2.DocumentCompleted += new System.Windows.Forms.WebBrowserDocumentCompletedEventHandler(this.webpage_loaded2);

        Thread.Sleep(60000);

        FileStream fileStream = new FileStream(@"c:\file1.txt", FileMode.Create);
        try
        {
            Byte[] info = new UTF8Encoding(true).GetBytes("services app output: " + webBrowser2.DocumentText);

            // Add some information to the file.
            fileStream.Write(info, 0, info.Length);
        }
        finally
        {
            fileStream.Close();
        }
    }

РЕДАКТИРОВАТЬ: мне нужен объект WebBrowser или WebKit.Net, потому что мне нужно выполнить javascript на странице, и мне нужно поддерживать логин (используя куки и публиковать данные).Если есть другой способ сделать это, пожалуйста, дайте мне знать.

1 Ответ

2 голосов
/ 24 мая 2011

Вам необходимо разместить свой элемент управления WebBrowser в форме, а затем внутри службы Windows запустить форму. WebBrowser не может ничего сделать без формы.

protected override void OnStart(string[] args)
{
    ThreadStart threadDelegate = new ThreadStart(myThread);
    Thread thread = new Thread(threadDelegate);
    thread.SetApartmentState(ApartmentState.STA);
    thread.Start();

    //let the form start with some sleep time or whatever you want

    ActionsToExecuteInWebBrowser();
}

void myThread()
{
    Application.Run(new FormHostingWebBrowserControl());
}

void ActionsToExecuteInWebBrowser()
{
    //Whatever you want to do in the WebBrowser here
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...