我想通过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脚本即可。
有人有类似的问题吗?
有人可以帮助我吗? 谢谢!
答案 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位)