0

在工作中,我们使用 Azure 函数来完成简单的任务。

若要调试或运行该函数,您需要一个正在运行的 Azure 存储模拟器。

问题是我们的开发者账户没有管理员权限,所以我们不能自己启动模拟器。现在我们通过要求管理员为我们启动它来解决这个问题,但这仅在您重新启动/关闭机器之前有效。我们尝试了很多方法让模拟器为每个用户启动(好像它是由管理员运行的),但没有任何效果。

这是我们尝试的方法之一。一个在启动时运行并启动模拟器的简单程序。如果您以管理员身份手动启动它,它会完成这项工作,并且模拟器会毫无问题地启动。但是,当计划在启动或登录时启动(使用管理员帐户)时,它会启动它,但仅适用于管理员帐户而不是当前用户。

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

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();
    }
}

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

PS:我已经搜索了 StackOverflow 上发布的相关主题以查找相同类型的问题,但他们没有太多帮助,或者用例不同。

:)

4

1 回答 1

0

根据此链接:第一次运行模拟器时,模拟器环境需要自行配置:它将在 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();
        }

    }

然后你就可以用你的开发者账号重新启动模拟器了,代码和上面类似。

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

于 2018-10-11T09:06:32.520 回答