在启动时为非管理员用户启动Azure存储模拟器

时间:2018-10-10 16:11:38

标签: c# azure azure-storage-emulator

在工作中,我们将Azure函数用于简单任务。

要调试或运行该功能,您需要运行的Azure存储模拟器。

问题在于我们的开发者帐户没有管理员权限,因此我们无法自行启动模拟器。 目前,我们通过要求管理员为我们启动它来解决此问题,但这仅在重新启动/关闭计算机之前有效。 我们尝试了很多事情让模拟器为每个用户启动(就像它是由管理员运行的一样),但是没有任何效果。

这是我们尝试的方法之一。一个简单的程序,在启动时运行并启动模拟器。如果您以管理员身份手动启动它,则它将完成工作,并且模拟器可以正常启动。 但是,当计划在启动或登录时(使用admin帐户)启动时,它仅针对admin帐户而非当前用户启动它。

我们在启动时运行的程序的代码:

internal class Program
{
    private static void Main(string[] args)
    {
        System.Diagnostics.Process process = new System.Diagnostics.Process();
        System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
        startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal;
        startInfo.FileName = @"C:\Program Files (x86)\Microsoft SDKs\Azure\Storage Emulator\AzureStorageEmulator.exe";
        startInfo.Arguments = "start";
        process.StartInfo = startInfo;
        process.Start();
    }
}

您对解决上述问题有任何想法或建议吗?

P.S:我已经搜索了StackOverflow上的相关主题,查找相同类型的问题,但是它们并没有太大帮助,或者用例有所不同。

:)

1 个答案:

答案 0 :(得分:0)

根据此link:第一次运行模拟器时,模拟器环境将需要进行自我配置:它将在LocalDB中创建一个数据库,并将注册一些HTTP端口。为了使配置过程成功,请you need administrator privilege

The next time you'll run the storage emulator, you will no longer need administrator privilege.

所以有一个棘手的方法,仅供参考。

您可以使用管理员来启动仿真器,然后等待几秒钟(完成初始化),然后停止仿真器。

然后,您可以使用普通用户帐户启动它,它将为您运行。

代码如下:

使用管理员帐户:

    private static void Main(string[] args)
    {
        System.Diagnostics.Process process = new System.Diagnostics.Process();
        System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
        startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal;
        startInfo.FileName = @"C:\Program Files (x86)\Microsoft SDKs\Azure\Storage Emulator\AzureStorageEmulator.exe";
        startInfo.Arguments = "start";
        process.StartInfo = startInfo;
        process.Start();

        //Wait for finished initialization
        System.Threading.Thread.Sleep(TimeSpan.FromSeconds(10));

        //After initialization, close the Emulator
        Process[] processes = Process.GetProcessesByName("AzureStorageEmulator");

        foreach (var p in processes)
        {
            p.Kill();
        }

    }

然后您可以使用您的开发人员帐户再次启动Emulator,代码与上面的代码相似。

这可能不是一个好选择,您也可以在here上提交问题。