【问题标题】:Run Azure Storage Emulator as service将 Azure 存储模拟器作为服务运行
【发布时间】:2016-03-04 23:47:01
【问题描述】:

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

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

【问题讨论】:

    标签: windows azure windows-services azure-storage-emulator


    【解决方案1】:

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

    按照 Gaurav Mantri 的描述运行批处理文件会使命令窗口保持打开状态。这是避免这种情况的一种方法:

    • 打开任务计划程序
    • 创建新任务
    • 添加“登录时”触发器
    • 使用以下设置添加“启动程序”操作:
      • 程序/脚本:AzureStorageEmulator.exe
      • 添加参数:start
      • 开始于:C:\Program Files (x86)\Microsoft SDKs\Azure\Storage Emulator(或存储模拟器驻留在磁盘上的任何位置)

    【讨论】:

    • 这仍然需要您登录到服务器,您是否能够像标准 Windows 服务一样设置它而无需登录?
    【解决方案2】:

    存储模拟器文件可以在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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 这在当时的模拟器版本下肯定可以工作,但不幸的是它今天不工作。服务启动,进程停留在内存中,但模拟器在命令行上报未运行状态,并向浏览器返回500服务器错误。嘘。我对这个寄予厚望。
      • 我刚刚阅读了 Orangutech 下面的帖子,这似乎是一个很好的解决方案。我将在今天晚些时候尝试并在此处报告结果。
      • 我无法让它作为服务运行(同样的问题,即使在 Orangutech 的 db 技巧之后),所以我做了下一个最好的事情:作为计划任务运行它,每小时在小时。事实证明,在 AzureStorageEmulator start -inprocess 已经在监听的时候运行它并没有什么坏处——它只是向控制台输出一条错误消息,仅此而已。
      • 仅供参考,我正在 SYSTEM 下运行计划任务。效果很好。
      【解决方案4】:

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

      问题是双重的:

      1. 它试图使用 LocalDB(SQL Express Subset) 实例

      2. 需要初始化一个新的DB,如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-databasehttps://docs.microsoft.com/en-us/azure/storage/common/storage-use-emulator#command-line-syntax

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-03
        • 1970-01-01
        • 2018-04-28
        • 1970-01-01
        • 2015-09-16
        • 1970-01-01
        相关资源
        最近更新 更多