运行 Azure 存储模拟器即服务

Run Azure Storage Emulator as service

我们在开发机器和 CI 服务器上使用 Azure 存储模拟器,以便能够在本地使用存储队列。现在每次退出 Windows 或重新启动时,我都需要手动启动存储模拟器。

有没有办法将 Azure 存储模拟器作为服务启动,以便它在 Windows 启动时自动启动?

可以在 C:\Program Files (x86)\Microsoft SDKs\Azure\Storage Emulator 中找到存储模拟器文件。我注意到那里有一个名为 StartStorageEmulator.cmd 的批处理文件。

您可以在 Startup 文件夹中创建此文件的快捷方式(例如 C:\Users\<your user name>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup)。然后当您再次登录时,存储模拟器将自动启动。 [请在此处查看说明:http://www.tech-recipes.com/rx/28206/windows-8-how-to-add-applications-startup-folder/]

另一种选择是创建一个新任务 运行 将此批处理文件添加到 运行 计算机启动时将该任务安排到 运行。有关详细信息,请参阅此线程:Run Batch File On Start-up.

尝试 Gaurav Mantris 答案中的选项后更新了答案

运行 Gaurav Mantri 描述的批处理文件保持命令 window 打开。这是避免这种情况的方法:

  • 打开任务计划程序
  • 创建新任务
  • 添加 "At log on" 触发器
  • 添加具有以下设置的 "Start a program" 操作:
    • Program/Script: AzureStorageEmulator.exe
    • 添加参数:start
    • 开始于:C:\Program Files (x86)\Microsoft SDKs\Azure\Storage Emulator(或存储模拟器驻留在磁盘上的任何位置)

运行 任何非服务进程(例如控制台应用程序)作为服务的一个选项是使用 Non-Sucking Service Manager 作为主机。 (从历史上看,您可能使用过 Windows NT 资源工具包中的 SRVANY.EXE。)

使用 NSSM 非常简单:

> choco install nssm -y
> nssm install AzureStorageEmulator "C:\Program Files (x86)\Microsoft SDKs\Azure\Storage Emulator\AzureStorageEmulator.exe" start -inprocess

在我们的 AX "OneBox" 开发环境中,已经有一个计划任务 DynamicsStartAzureStorageEmulator 在启动时将模拟器作为 NT AUTHORITY\SYSTEM 启动。 Azure 存储模拟器已升级(自动?由开发人员?),然后停止工作。

问题是双重的:

  1. 它正在尝试使用 LocalDB(SQL Express 子集)实例

  2. 需要初始化一个新的数据库,作为SYSTEM。

(例如,之前是 AzureStorageEmulatorDB49,现在是 AzureStorageEmulatorDB510

一旦我 运行 a shell/cmd 作为 SYSTEM(使用 PSEXEC,并尝试 运行 模拟器查看错误输出,剩下的就很简单了。

解决方案几乎就是:运行 shell 作为系统(使用 Psexec)

PsExec.exe -i -s cmd

并以 SYSTEM 身份初始化新数据库(在我们的例子中,使用 "Real" SQL,而不是 LocalDB/Express):

AzureStorageEmulator.exe init -server localhost

(如果您想坚持使用 LocalDB,AzureStorageEmulator.exe init 应该可以正常工作)

因为它是多个虚拟机,所以我使用了 powershell 远程处理:

$ListOfHostnames | foreach {.\PsExec.exe \$_ -i -s "C:\Program Files (x86)\Microsoft SDKs\Azure\Storage Emulator\AzureStorageEmulator.exe" init -server localhost}

(是的,如果你有 PwSH 7,你可以使用 -parallel ;)

之后,只需重新启动即可验证是否全部自动启动。

附加项目: 我将计划任务也设置为每天早上 5 点开始一次,以防万一由于某种原因 运行ning 不在。

一些环境在 LocalDB 实例上有一个模拟器数据库,我删除了它。不是绝对必要,只是更清洁。

参考文献:

https://docs.microsoft.com/en-us/azure/storage/common/storage-use-emulator#initialize-the-storage-emulator-to-use-a-different-sql-databasehttps://docs.microsoft.com/en-us/azure/storage/common/storage-use-emulator#command-line-syntax