Azure Functions 上的 VCRedist 2015+

问题描述

我想运行一个在 Azure Function 应用上内部创建的 exe 文件。它执行一些需要 Visual C++ Redistributables 2015 的处理,但是它没有安装在运行该函数的虚拟机中,它仅随 2012 (I used reg query to find this out) 提供。有没有办法让可执行文件正常运行?

我尝试在与我的 exe 相同的文件夹中复制一些必需的 dll 并将路径添加到环境变量 %PATH%,这在函数上不起作用,但在常规 VM 上起作用(可能是因为沙箱函数 VM 的性质)。

解决方法

是的,没错。 Azure 应用服务/Azure 函数在称为沙箱的安全环境中运行,该环境具有一定的限制。限制比如玩一些 com 组件、写入注册表、User32/GDI32 限制。沙箱描述为 here

恐怕您将无法访问控制台并安装任何通过脚本运行的第 3 方库,例如:EXE 或 MSI。所以你不必显式加载/安装任何东西。

因此,如果您有任何与这些沙箱限制相关的任何内容,那么选择 Azure VM(您可以自己管理操作系统和安装的库)会更有意义。

仅供参考,您可以参考this来检查您的应用服务安装了哪个包。 [注意:由于本文档较旧,您可能看不到最新的VS示例,但它会引导您检查库的版本详细信息]

,

我能够完成这项工作。我从一个 .bat 文件运行应用程序,该文件做的很少,但其中一件事是干预 PATH。我对此进行了评论,但仍然无法正常工作,因此我直接从 .exe 文件运行了该应用程序,并且在同一文件夹中具有所需的 vc redist dll(其中 4 个)就可以解决问题。 事实证明,在我需要的条件下运行应用程序(带有预热实例的高级计划)比使用 Azure Batch 更昂贵,而且很可能比拥有专用 VM 更昂贵,这两者都让我更容易拥有我的必需品预先安装。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...