Как запустить Windows Azure Storage Emulator версии 3.0 из кода

Поскольку я установил новый Windows Azure SDK 2.3, я получил предупреждение от csrun:

«Взаимодействие с DevStore через CSRun устарело. Вместо этого используйте WAStorageEmulator.exe».

Так вот есть два вопроса: 1) Как правильно запустить новый эмулятор хранилища из кода? 2) Как определить по коду, запущен ли уже эмулятор хранилища?


person huha    schedule 08.04.2014    source источник


Ответы (3)


Я сам нашел решение. Вот мой код С#. Старый код, используемый для SDK 2.2, закомментирован.

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;
}
person huha    schedule 08.04.2014

См. мой ответ здесь. На самом деле он использует API состояния WAStorageEmulator вместо того, чтобы просто полагаться на проверку того, существует ли процесс, как в собственном ответе @huha.

person David Peden    schedule 18.01.2015
comment
Я рад видеть, что эта тема развивается. Ваше решение действительно умнее моего. Может быть, тестирование немного медленнее, если эмулятор работает, но это не должно иметь большого значения. - person huha; 19.01.2015

См. мой ответ здесь. Он использует небольшой аккуратный пакет NuGet, помогающий программно запустить/остановить эмулятор хранилища Azure: RimDev.Automation.StorageEmulator.

person infl3x    schedule 22.07.2019