在工作中,我们将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上的相关主题,查找相同类型的问题,但是它们并没有太大帮助,或者用例有所不同。
:)
答案 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上提交问题。