【问题标题】:Start Azure Storage Emulator for non-Admin users on Startup在启动时为非管理员用户启动 Azure 存储模拟器
【发布时间】:2018-10-10 16:11:38
【问题描述】:

在工作中,我们使用 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();
    }
}

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

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

:)

【问题讨论】:

  • 只是想澄清一下。 1.你是如何添加管理员权限的? , 2. 对于“不为当前用户”,是不是意味着在任务管理器中,它运行在管理员账户而不是开发者账户下?```
  • 管理员在任务调度器中设置了任务,是的,它只为他运行
  • 还有一件事,你只是想在机器(机器或你的程序,请帮助澄清)启动时启动模拟器并在普通用户下运行,对吧?
  • 是的,我希望它为我运行

标签: c# azure azure-storage-emulator


【解决方案1】:

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

    }

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

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

【讨论】:

  • 我尝试了这个和ms提出的方法,但问题仍然存在。模拟器仍然要求管理员。 :(
  • 目前我没有一个干净的环境,但我稍后会为这个测试设置一个干净的环境。
猜你喜欢
  • 2017-05-09
  • 2021-09-12
  • 2018-12-28
  • 2012-07-09
  • 1970-01-01
  • 1970-01-01
  • 2014-09-09
  • 2011-11-24
相关资源
最近更新 更多