Windows 将Azure存储仿真程序作为服务运行
我们在开发机器和CI服务器上使用Azure Storage Emulator,以便能够在本地使用存储队列。现在,每当我注销Windows或重新启动时,我都需要手动启动存储模拟器Windows 将Azure存储仿真程序作为服务运行,windows,azure,windows-services,azure-storage-emulator,Windows,Azure,Windows Services,Azure Storage Emulator,我们在开发机器和CI服务器上使用Azure Storage Emulator,以便能够在本地使用存储队列。现在,每当我注销Windows或重新启动时,我都需要手动启动存储模拟器 是否有方法启动Azure storage emulator as service,以便它在Windows启动时自动启动?可以在C:\Program files(x86)\Microsoft SDK\Azure\storage emulator中找到存储仿真程序文件。我注意到其中有一个批处理文件,名为StartStorag
是否有方法启动Azure storage emulator as service,以便它在Windows启动时自动启动?可以在
C:\Program files(x86)\Microsoft SDK\Azure\storage emulator
中找到存储仿真程序文件。我注意到其中有一个批处理文件,名为StartStorageEmulator.cmd
您可以在Startup
文件夹中创建此文件的快捷方式(例如C:\Users\\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
)。然后,当您再次登录时,存储仿真器将自动启动。[请参阅此处的说明:
另一种方法是创建一个运行此批处理文件的新任务,并计划在计算机启动时运行该任务。有关详细信息,请参阅此线程:。在尝试Gaurav Mantris answer中的选项后更新了答案
按照Gaurav Mantri所述运行批处理文件会使命令窗口保持打开状态。以下是一种避免这种情况的方法:
- 打开任务调度器
- 创建新任务
- 添加“At logon”触发器
- 添加具有以下设置的“启动程序”操作:
- 程序/脚本:
AzureStorageEmulator.exe
- 添加参数:
start
- 从以下位置开始:
(或存储仿真器位于磁盘上的任何位置)C:\ProgramFiles(x86)\Microsoft SDK\Azure\Storage Emulator
- 程序/脚本:
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存储仿真器已升级(由开发人员自动升级),然后它停止工作
这个问题有两个方面:
AzureStorageEmulatorDB49
,现在是AzureStorageEmulatorDB510
)
一旦我运行shell/cmd作为系统(使用PSEXEC),并尝试运行模拟器以查看错误输出,剩下的就非常简单了
解决方案非常简单:将shell作为系统运行(使用Psexec)
作为系统,初始化新数据库(在本例中,使用“真实”SQL,而不是LocalDB/Express):
(如果您想使用w/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实例上有一个emulator DB,我删除了它。严格来说,这不是必需的,只是更干净而已
参考资料:
及
这仍然需要您登录到服务器,您是否能够将其设置为标准Windows服务,而不必登录?这在当时的emulator版本下确实有效,但不幸的是,它今天不起作用。服务启动,进程保留在内存中,但emulator在命令处报告未运行状态行并将500服务器错误返回到浏览器。嘘。我对这一次寄予厚望。我刚刚阅读了下面Orangutech的帖子,这似乎是一个很好的解决方案。今天晚些时候我将尝试它,并在这里报告结果。我无法使它作为服务工作(同样的问题,即使在Orangutech的db技巧之后),所以我做了第二件最好的事情:作为一个计划任务,每小时一小时地运行一次。结果表明,运行
AzureStorageEmulator start-inprocess
,当它已经在侦听时,它只会向控制台发出一条错误消息,仅此而已。仅供参考,我正在系统下运行计划任务。效果很好。
AzureStorageEmulator.exe init -server localhost
$ListOfHostnames | foreach {.\PsExec.exe \\$_ -i -s "C:\Program Files (x86)\Microsoft SDKs\Azure\Storage Emulator\AzureStorageEmulator.exe" init -server localhost}