Windows 将Azure存储仿真程序作为服务运行

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

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


是否有方法启动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
      (或存储仿真器位于磁盘上的任何位置)

将任何非服务进程(如控制台应用程序)作为服务运行的一个选项是使用作为主机(以前您可能使用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(sqlexpresssubset)实例

  • 它需要初始化一个新的数据库,如系统

  • (例如,以前是
    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}