我们在开发机器和 CI 服务器上使用 Azure 存储模拟器,以便能够在本地使用存储队列。现在每次我退出 Windows 或重新启动时,我都需要手动启动存储模拟器。
有没有办法将 Azure 存储模拟器作为服务启动,以便它在 Windows 启动时自动启动?
我们在开发机器和 CI 服务器上使用 Azure 存储模拟器,以便能够在本地使用存储队列。现在每次我退出 Windows 或重新启动时,我都需要手动启动存储模拟器。
有没有办法将 Azure 存储模拟器作为服务启动,以便它在 Windows 启动时自动启动?
按照 Gaurav Mantri 的描述运行批处理文件会使命令窗口保持打开状态。这是避免这种情况的一种方法:
AzureStorageEmulator.exe
start
C:\Program Files (x86)\Microsoft SDKs\Azure\Storage Emulator
或存储模拟器驻留在磁盘上的任何位置)将任何非服务进程(例如控制台应用程序)作为服务运行的一种选择是将Non-Sucking Service Manager用作主机。(从历史上看,您可能使用SRVANY.EXE
过 Windows NT 资源工具包。)
使用 NSSM 很简单:
> choco install nssm -y
> nssm install AzureStorageEmulator "C:\Program Files (x86)\Microsoft SDKs\Azure\Storage Emulator\AzureStorageEmulator.exe" start -inprocess
存储模拟器文件可以在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/]。
其他替代方法是创建一个运行此批处理文件的新任务,并安排该任务在计算机启动时运行。有关更多详细信息,请参阅此线程:在启动时运行批处理文件。
在我们的 AX“OneBox”开发环境中,已经有一个计划任务DynamicsStartAzureStorageEmulator
在启动时将模拟器作为 NT AUTHORITY\SYSTEM 启动。Azure 存储模拟器已升级(自动?由开发人员?),然后它停止工作。
这个问题是双重的:
它试图使用 LocalDB(SQL Express Subset) 实例
它需要初始化一个新的数据库,如 SYSTEM。
(例如,以前是AzureStorageEmulatorDB49
,现在是AzureStorageEmulatorDB510
)
一旦我以 SYSTEM 身份运行 shell/cmd(使用 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 点开始一次,以防万一它由于某种原因没有运行。
一些环境在 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