如何“掏空”到Azure webjob中的二进制文件?

问题描述 投票:0回答:2

我需要创建一个脱机作业处理器,该处理器将根据队列调用具有不同命令行标记集的控制台可执行文件。 我已经在Visual Studio中使用“ Azure WebJobs SDK:队列”模板创建了一个新项目。 我知道我可以将其部署到Azure,它将创建一个虚拟机并将其设置为正常运行。

我已经拥有一个网络“工作者角色”,基本上可以做同样的事情,但是在那种情况下,我编写了它所调用的代码,并提供了我的代码所需要的库的源代码。 这次,我需要调用别人写的“罐头”二进制文件,而我无法访问该源文件。

我可以在项目中创建一个子文件夹,然后将可执行文件(及其所有文件夹和库)转储到该文件夹​​中,但是我不知道如何从Webjob调用它。 如果二进制文件仅位于项目的子文件夹中,那么一旦将其部署到Azure中的云服务,二进制文件的路径结构是什么?

另外,此二进制文件确实希望驻留在C:\\ Software \\ 中。 当将此应用程序部署到Azure中的云服务时,是否可以指定要在虚拟机上创建的特定外部目录? 如果可以的话,它将更好地工作,并且我确切地知道如何调用可执行文件。

azure azure-webjobs azure-worker-roles
2个回答
0
投票

您可以使用相对路径来定位您的子可执行文件。 当前目录始终是运行主要WebJob exe的位置,从而可以轻松地在子文件夹中找到附属文件。

但是,您将无法把exe放在c:\\software\\directory 。 您将需要确保所需生成的exe可以从任意文件夹运行。


0
投票

作为辅助角色的一部分,您可以创建一个子文件夹,并将二进制文件放入其中。 (在执行此操作时,您不能在Visual Studio中拖放文件夹,因此,就我而言,我必须创建多个子文件夹并将文件拖放到其中,以使应用程序正常工作。)

在此处输入图片说明

部署后,辅助角色将将此任意文件文件夹复制到Azure中的辅助服务器,然后可以在其中调用它。 部署后,此任意文件夹将位于...TASACDWS\\TASACDWS\\TASACDWS\\csx\\Debug\\roles\\TASACDWS_Worker\\approot

辅助角色本身的“ root”或“ base”文件夹是进程的当前目录。 因此,如果我的应用程序位于工作角色(在Visual Studio中)下的一个名为“ Arbitrary_Binary”的文件夹中,则可以使用如下的Process对象来引用它:

Process p = new Process();
p.StartInfo.UseShellExecute = false;
p.StartInfo.CreateNoWindow = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.WorkingDirectory = "Arbitrary_Binary";
p.StartInfo.FileName = "Arbitrary_Binary\\Arbitrary_Binary.exe";
p.Start();
string output = p.StandardOutput.ReadToEnd();
p.WaitForExit();
© www.soinside.com 2019 - 2024. All rights reserved.