.Net控制台应用程序可以正常工作,直到它作为Azure WebJob上传到Azure网站。要复制的代码:
using System;
using System.Runtime.InteropServices;
using System.Windows.Input;
namespace ConsoleApplication2
{
class Program
{
[DllImport("user32.dll")]
private static extern uint MapVirtualKey(uint uCode, uint uMapType);
static void Main()
{
foreach (uint c in new uint[] {18, 31})
{
var mapped = (int) MapVirtualKey(c, 1);
Console.WriteLine($"{mapped} : {KeyInterop.KeyFromVirtualKey(mapped)}");
}
}
}
}
预期产出:
69:E
83:S
实际输出:
-1073741790:无
-1073741790:无
不知道从哪里开始。是否意味着此api呼叫拒绝访问?
答案 0 :(得分:1)
这不起作用的原因是Azure Web App沙箱阻止了MapVirtualKey
API。您可以在https://github.com/projectkudu/kudu/wiki/Azure-Web-App-sandbox上了解有关沙箱的更多信息。特别参见本段:
为了减少激进的攻击面积,沙盒可以防止几乎所有的Win32k.sys API被调用,这实际上意味着大多数User32 / GDI32系统调用都被阻止了。对于大多数应用程序而言,这不是问题,因为大多数Azure Web应用程序不需要访问Windows UI功能(毕竟它们是Web应用程序)。