从Azure Webjob C#运行netuse命令

时间:2018-10-23 06:54:33

标签: c# azure azure-webjobs azure-files

我编写了一个C#控制台应用程序,该应用程序使用net命令连接到Azure文件共享,然后对文件执行一些任务。下面是将使用进程连接到文件共享的代码。当从本地系统作为控制台应用程序运行时,它运行良好。

string netUseCommand = applicationDbContext.AccountConfigurations.FirstOrDefault().NetUseCommand;//Get net use command from database
// Use ProcessStartInfo class
ProcessStartInfo startInfo = new ProcessStartInfo
{
   CreateNoWindow = false,
   UseShellExecute = false,
   Verb = "runas",
   FileName = "cmd.exe",
   WindowStyle = ProcessWindowStyle.Hidden,
   Arguments = @"/c " + netUseCommand + " & " + " Z: && " + "//command to perform file operations"
 };
try
{
  // Start the process with the info we specified.
  // Call WaitForExit and then the using statement will close.
  using (Process exeProcess = Process.Start(startInfo))
  {
     exeProcess.WaitForExit();  
  }
}
catch (Exception ex)
{
   // Log error.
   Console.Out.WriteLine("Error Occurred:  Error:" + ex.Message);
   throw ex;
}

当我将Azure控制台应用程序部署为webjob时,它在执行netuse命令时由于以下错误而开始失败

[10/23/2018 04:12:45 > 7b7826: ERR ] Access is denied.

我发现webjob不支持azure Powershell。与process(cmd.exe)是否存在相同问题?请提供解决方案或任何其他替代解决方案。

谢谢。

2 个答案:

答案 0 :(得分:0)

您需要使用File Service REST API

例如from the docs,要列出文件夹/目录中的文件,请使用:

https://myaccount.file.core.windows.net/myshare/mydirectorypath?restype=directory&comp=list

然后寻找一个C#库来执行文件所需的操作,或者编写自己的操作。

答案 1 :(得分:0)

因为WebApp是sandbox。不支持使用netuse命令映射驱动程序以操作Azure WebApp上的文件共享存储。

如果我们想在Azure WebApp上操作文件存储,正如Murray Foxcroft提到的,我们可以使用file service rest api。我们还使用Azure存储库来做到这一点。我们可以从azure official document获取带有Azure存储库的C#演示代码。

如果仍然要映射驱动器来操作文件存储,则可以使用Azure VM服务代替Azure WebApp。