Search code examples
c#azureazure-storageazure-storage-emulator

How to start Windows Azure Storage Emulator V3.0 from code


Since I installed the new Windows Azure SDK 2.3 I got a warning from csrun:

"DevStore interaction through CSRun has been depricated. Use WAStorageEmulator.exe instead."

So there are two questions: 1) How to start the new storage emulator correctly from code? 2) How to determine from code if the storage emulator is already running?


Solution

  • I found the solution myself. Here is my C# code. The old code used for SDK 2.2 is commented out.

    public static void StartStorageEmulator()
    {
        //var count = Process.GetProcessesByName("DSServiceLDB").Length;
        //if (count == 0)
        //  ExecuteCSRun("/devstore:start");
        var count = Process.GetProcessesByName("WAStorageEmulator").Length;
        if (count == 0)
            ExecuteWAStorageEmulator("start");
    }
    
    /*
    private static void ExecuteCSRun(string argument)
    {
        var start = new ProcessStartInfo
        {
            Arguments = argument,
            FileName = @"c:\Program Files\Microsoft SDKs\Windows Azure\Emulator\csrun.exe"
        };
    var exitCode = ExecuteProcess(start);
    Assert.AreEqual(exitCode, 0, "Error {0} executing {1} {2}", exitCode, start.FileName, start.Arguments);
    }
    */
    
    private static void ExecuteWAStorageEmulator(string argument)
    {
        var start = new ProcessStartInfo
        {
            Arguments = argument,
            FileName = @"c:\Program Files (x86)\Microsoft SDKs\Windows Azure\Storage Emulator\WAStorageEmulator.exe"
        };
        var exitCode = ExecuteProcess(start);
        Assert.AreEqual(exitCode, 0, "Error {0} executing {1} {2}", exitCode, start.FileName, start.Arguments);
    }
    
    private static int ExecuteProcess(ProcessStartInfo start)
    {
        int exitCode;
        using (var proc = new Process { StartInfo = start })
        {
            proc.Start();
            proc.WaitForExit();
            exitCode = proc.ExitCode;
        }
        return exitCode;
    }