如何按计划 运行 Azure 中的 C# Winform?
How to run a C# Winform in Azure on a Schedule?
我编写了一个无需用户输入即可执行任务的 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 中更改 URLs 不起作用.
所以我的问题是,什么 Azure 服务会让我 运行 按计划使用 winform?如果不是 Azure,我会选择亚马逊或其他服务。 (我不想让自己的专用物理计算机必须 运行 这个程序。谢谢。
当 运行 网络作业时,您的应用程序 运行 在沙箱中作为 described here 运行,它在其他有趣的事情中说:
For the sake of radical attack surface area reduction, the sandbox
prevents almost all of the Win32k.sys APIs from being called, which
practically means that most of User32/GDI32 system calls are blocked.
For most applications this is not an issue since most Azure Web Apps
do not require access to Windows UI functionality (they are web
applications after all).
因此,如果您想 运行 一个 UI 应用程序,您必须在 VM 上进行。 Cloud Service 可能是可行的方法,或者只是一个普通的虚拟机。
我编写了一个无需用户输入即可执行任务的 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 中更改 URLs 不起作用.
所以我的问题是,什么 Azure 服务会让我 运行 按计划使用 winform?如果不是 Azure,我会选择亚马逊或其他服务。 (我不想让自己的专用物理计算机必须 运行 这个程序。谢谢。
当 运行 网络作业时,您的应用程序 运行 在沙箱中作为 described here 运行,它在其他有趣的事情中说:
For the sake of radical attack surface area reduction, the sandbox prevents almost all of the Win32k.sys APIs from being called, which practically means that most of User32/GDI32 system calls are blocked. For most applications this is not an issue since most Azure Web Apps do not require access to Windows UI functionality (they are web applications after all).
因此,如果您想 运行 一个 UI 应用程序,您必须在 VM 上进行。 Cloud Service 可能是可行的方法,或者只是一个普通的虚拟机。