1

我编写了一个 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);

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

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

4

1 回答 1

3

运行 webjob 时,您的应用程序正在沙箱中运行,如此处所述,其中包含其他有趣的内容:

为了彻底减少攻击面,沙盒阻止了几乎所有的 Win32k.sys API 被调用,这实际上意味着大部分 User32/GDI32 系统调用都被阻止了。对于大多数应用程序来说,这不是问题,因为大多数 Azure Web 应用程序不需要访问 Windows UI 功能(它们毕竟是 Web 应用程序)。

因此,如果您想运行 UI 应用程序,您必须在 VM 上进行。云服务可能是要走的路,或者只是一个普通的虚拟机。

于 2016-03-04T21:58:44.003 回答