我需要创建一个脱机作业处理器,它将根据队列调用具有不同命令行标志的控制台可执行文件。我使用" Azure WebJobs SDK:Queues"创建了一个新项目。 Visual Studio中的模板。我知道我可以将它部署到Azure,它将创建一个虚拟机并将其全部设置为工作。
我已经有了一个网络"工作者角色"基本上做同样的事情,但是,在那种情况下,我编写了它调用的代码,并将源代码提供给我的代码所需的库。这一次,我需要打电话给#34;罐头"其他人写的二进制文件,我无法访问该文件源。
我可以在项目中创建一个子文件夹,并将可执行文件(及其所有文件夹和库)转储到此文件夹中,但我不知道如何从我的webjob中调用它。一旦部署到Azure中的云服务,二进制文件的路径结构是什么,如果它只是位于项目的子文件夹中?
此外,这个二进制文件真的希望存在于C:\ Software \< Directory>中。当此应用程序部署到Azure中的云服务时,是否可以指定要在虚拟机上创建的此特定外部目录?如果我能做到这一点,它会更好,并且我知道如何调用可执行文件。
答案 0 :(得分:0)
您可以使用相对路径来查找子可执行文件。当前目录始终是运行主WebJob exe的位置,从而可以轻松地在子文件夹中查找卫星文件。
但是,您 无法将您的exe放入c:\software\directory
。您需要确保生成所需的exe可以从任意文件夹运行。
答案 1 :(得分:0)
作为辅助角色的一部分,您可以创建一个子文件夹,并将二进制文件放入其中。 (在执行此操作时,您无法在Visual Studio中拖放文件夹,因此,在我的情况下,我必须创建多个子文件夹,并将文件放入其中,以使我的应用程序正常工作。)
部署后,worker角色会将此任意文件的文件夹复制到Azure中的工作服务器,然后可以在其中调用它。部署后,此任意文件夹将位于...TASACDWS\TASACDWS\TASACDWS\csx\Debug\roles\TASACDWS_Worker\approot
辅助角色本身的“root”或“base”文件夹是进程的当前目录。因此,如果我的应用程序位于worker角色下的一个名为“Arbitrary_Binary”的文件夹中(在Visual Studio中),我可以使用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();