如何在计划中在Azure中运行C#Winform?

时间:2016-03-04 17:36:39

标签: c# winforms azure schedule webjob

我编写了一个C#Winform应用程序,它在没有用户输入的情况下执行任务,我想按计划运行该程序(例如,每天凌晨1点)。我想在Azure上设置程序,以便它在云上运行。

到目前为止,我已成功运行Azure Webjobs(Azure Web Apps下的一项服务)中的C#控制台应用程序,这些工作正常,但如果我尝试上传并运行Winform,我会收到错误:

[03/03/2016 17:27:12 > 252553: ERR ] Unhandled Exception: System.Runtime.InteropServices.COMException: Error HRESULT E_FAIL has been returned from a call to a COM component.
[03/03/2016 17:27:12 > 252553: ERR ]    at System.Windows.Forms.UnsafeNativeMethods.IWebBrowser2.Navigate2(Object& URL, Object& flags, Object& targetFrameName, Object& postData, Object& headers)
[03/03/2016 17:27:12 > 252553: ERR ]    at System.Windows.Forms.WebBrowser.PerformNavigate2(Object& URL, Object& flags, Object& targetFrameName, Object& postData, Object& headers)
[03/03/2016 17:27:12 > 252553: ERR ]    at System.Windows.Forms.WebBrowser.set_Url(Uri value)
[03/03/2016 17:27:12 > 252553: ERR ]    at WebBrowserTest.Form1.InitializeComponent()
[03/03/2016 17:27:12 > 252553: ERR ]    at WebBrowserTest.Form1..ctor()
[03/03/2016 17:27:12 > 252553: ERR ]    at WebBrowserTest.MainStartup.Main()
[03/03/2016 17:27:12 > 252553: SYS INFO] Status changed to Failed

在日志中。在代码中,错误特别在我尝试调用webBrowser.Navigate函数的行上。

Uri uri = new Uri("https://www.website.com");
webBrowser1.Navigate(uri);

网址本身是绝对正确的,当我在桌面上运行它时它可以正常工作,但我猜想在C#Webbrowser中更改网址并不起作用。

所以我的问题是,Azure服务会让我按计划运行winform?如果不是Azure,我将采用亚马逊或其他服务。 (我不想让我自己的专用物理计算机来运行这个程序。谢谢。

1 个答案:

答案 0 :(得分:3)

运行webjob时,您的应用程序在沙箱中以described here运行,其中包含其他有趣的内容:

  

为了激进攻击表面积减少,沙箱   防止几乎所有Win32k.sys API被调用,这   实际上意味着大多数User32 / GDI32系统调用都被阻止。   对于大多数应用程序,这不是大多数Azure Web Apps以来的问题   不需要访问Windows UI功能(它们是Web   毕竟申请。)

因此,如果要运行UI应用程序,则必须在VM上执行此操作。 Cloud Service可能是最简单的虚拟机。