运行 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 存储模拟器已升级(自动?由开发人员?),然后停止工作。
问题是双重的:
它正在尝试使用 LocalDB(SQL Express 子集)实例
需要初始化一个新的数据库,作为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-database 和
https://docs.microsoft.com/en-us/azure/storage/common/storage-use-emulator#command-line-syntax
我们在开发机器和 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
(或存储模拟器驻留在磁盘上的任何位置)
- Program/Script:
运行 任何非服务进程(例如控制台应用程序)作为服务的一个选项是使用 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 存储模拟器已升级(自动?由开发人员?),然后停止工作。
问题是双重的:
它正在尝试使用 LocalDB(SQL Express 子集)实例
需要初始化一个新的数据库,作为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-database 和 https://docs.microsoft.com/en-us/azure/storage/common/storage-use-emulator#command-line-syntax