在Azure Function

时间:2018-09-18 10:21:16

标签: c++ azure dll exe azure-functions

我想通过Azure函数执行依赖DLL的C ++ .exe。它可以在我的本地计算机上运行,​​也可以在使用kudo控制台启动exe时使用。

就像帖子Run .exe executable file in Azure Function中一样,建议我准备run.csx并将.exe和DLL加载到同一文件夹“ D:\ home \ site \ wwwroot \ QueueTriggerCSharp1 \”中。

当不需要C ++代码中的DLL时可以使用。否则,C ++将找不到DLL(与.exe在同一文件夹中),并且退出代码为-1073741701。 如果我不上传DLL,则会得到相同的退出代码。

我应该在哪里加载DLL或其他原因?

run.csx代码:

using System;
using System.Threading;
using System.Diagnostics;

public static void Run(TimerInfo myTimer, TraceWriter log)
{
    System.Diagnostics.Process process = new System.Diagnostics.Process();
    string WorkingDirectoryInfo =@"D:\home\site\wwwroot\QueueTriggerCSharp1\";
    string ExeLocation = @"D:\home\site\wwwroot\QueueTriggerCSharp1\WriteDatebase2.exe";
    Process proc = new Process();
    ProcessStartInfo info = new ProcessStartInfo();
    info.WorkingDirectory = WorkingDirectoryInfo;
    log.Info($"WorkingDirectory: {info.WorkingDirectory}");
    info.FileName = ExeLocation;
    info.Arguments = "";
    info.UseShellExecute = false;
    info.CreateNoWindow = true;
    proc.StartInfo = info;
    proc.Start();
    proc.WaitForExit();
    int exitcode=proc.ExitCode;
    log.Info($"ExitCode: {exitcode}");
}

当我使用python azure函数启动exe时,会发生相同的错误。在工藤控制台中启动python脚本即可。

有人有类似的问题吗?

有人可以帮助我吗? 谢谢!

1 个答案:

答案 0 :(得分:0)

根据我刚刚与Microsoft支持人员举行的会议,无法执行此操作

Azure Functions是一个受高度控制(sandboxed)的环境,尽管必需的DLL与EXE相邻,但对system32目录的访问阻止EXE操作。

我发现带有DLL的EXE在server/core上可以正常工作,但在nanoserver上则不能工作。因此,我怀疑Function可能使用nanoserver,这可能是问题所在。

让您的C ++在纳米服务器上工作 可能是功能的门户。但是,即使它不能使您进入“功能”,您也可以从大大降低的纳米服务器占用空间中受益。但是,我对在nanoserver上运行的基于DLL的EXE并不乐观。也许静态链接的EXE是一个选择。

某位同事实际上早些时候已在Functions中运行了一些控制台应用程序,但此后已停止工作。

编辑:最近了解到,nanoserver将永远不支持32位应用程序(不确定64位)