在 Azure Function 中运行 .exe 可执行文件

在 Azure Function 中运行 .exe 可执行文件

问题描述:

我有可执行的 abcd.exe(它包含/合并了许多 .dll).是否可以为 abcd.exe 创建 Azure Function 并在 Azure Cloud Functions 中运行它?

I have executable abcd.exe (it contains/merged with many .dll). Is it possible to create Azure Function for abcd.exe and run it in Azure Cloud Functions?

abcd.exe 应用程序:

The abcd.exe application :

System.Diagnostics.Process process = new System.Diagnostics.Process();

System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();

startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;

startInfo.FileName = "cmd.exe";

**startInfo.Arguments = "/C abcd.exe";**

process.StartInfo = startInfo;

process.Start();

abcd.exe 应用程序没有 UI (GUI),但它是数学和科学应用程序,它依赖于合并到 abcd.exe 中的许多 .dll.

The abcd.exe application does not have UI (GUI), but it is math and scientific Application and it depend from many .dll which are merged inside abcd.exe.

谢谢

是否可以为 abcd.exe 创建 Azure Functions 并在 Azure Cloud Functions 中运行它?

Is it possible to create Azure Function for abcd.exe and run it in Azure Cloud Functions?

是的,我们可以上传 .exe 文件并在 Azure Function 应用程序中运行它.我创建了一个 TimerTrigger Function 应用程序,并运行一个 .exe,在这个函数应用程序中将记录插入到数据库中,这在我这边工作正常.

Yes, we can upload .exe file and run it in Azure Function app. I create a TimerTrigger Function app, and run a .exe that insert record into database in this Function app, which works fine on my side.

function.json

{
  "bindings": [
    {
      "name": "myTimer",
      "type": "timerTrigger",
      "direction": "in",
      "schedule": "0 */1 * * * *"
    }
  ],
  "disabled": false
}

run.csx

using System;

public static void Run(TimerInfo myTimer, TraceWriter log)
{
    System.Diagnostics.Process process = new System.Diagnostics.Process();
    process.StartInfo.FileName = @"D:homesitewwwrootTimerTriggerCSharp1	estfunc.exe";
    process.StartInfo.Arguments = "";
    process.StartInfo.UseShellExecute = false;
    process.StartInfo.RedirectStandardOutput = true;
    process.StartInfo.RedirectStandardError = true;
    process.Start();
    string output = process.StandardOutput.ReadToEnd();
    string err = process.StandardError.ReadToEnd();
    process.WaitForExit();

    log.Info($"C# Timer trigger function executed at: {DateTime.Now}");
}

上传.exe文件到Function app文件夹

我的 .exe 程序中的主要代码

SqlConnection cn = new SqlConnection("Server=tcp:{dbserver}.database.windows.net,1433;Initial Catalog={dbname};Persist Security Info=False;User ID={user_id};Password={pwd};MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;");
cn.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = cn;

cmd.CommandText = "insert into [dbo].[debug]([Name]) values('test')";

cmd.ExecuteNonQuery();
cn.Close();

查询数据库,发现测试记录是从我的.exe文件中插入的.