如何让CosmosDB Emulator在机器启动/重启时自动启动

时间:2018-05-02 15:54:08

标签: azure

我们正在尝试将Azure存储模拟器和Azure CosmosDB模拟器用于本地开发以及作为CI / CD构建的一部分进行单元测试。以下是有关这些模拟器的详细信息的主要链接: https://docs.microsoft.com/en-us/azure/cosmos-db/local-emulator

作为这项工作的一部分,我们需要一些方法来启动和停止两个模拟器。我们已尝试在Docker上运行,但由于反病毒干预等问题,它有自己的问题,所以我不想在这篇文章中讨论该选项。

这是我们的主要要求 - 在机器重启/启动期间启动模拟器。我们能够通过调用适当的命令通过Windows任务计划程序启动模拟器,以便在Azure存储模拟器的情况下工作,这非常简单。所以我们尝试了与CosmosDB仿真器相同的方法,但它只是失败了"灾难性故障(0x8000FFFF)"没有太多细节的错误来解决问题。这是在Windows Server 2016 Standard计算机上,但我在Windows 10 Enterprise计算机上也得到了相同的结果。

从那时起,我尝试了以下几个其他选项:

  1. 使用以下命令创建批处理文件,并通过任务计划程序运行它: start / d" C:\ Program Files \ Azure Cosmos DB Emulator" CosmosDB.Emulator.exe
  2. 这在我手动运行批处理文件时有效,但不能通过任务调度程序运行。

    1. 使用PowerShell的方法与上述相同。

    2. 最后,我使用Topshelf创建了一个Windows服务,它在使用visual studio或调试代码运行时再次起作用,但在我安装服务并在服务控制台中运行时却没有。

    3. 我们尝试过使用具有管理员权限的用户帐户。我错过了在原帖中添加以下详细信息:

      如果由我或我的团队成员手动运行,CosmosDB模拟器将启动,但当任务调度程序调用它时,会将以下错误写入系统日志

      特定于应用程序的权限设置不会为具有CLSID的COM Server应用程序授予“本地激活”权限  {D63B10C5-BB46-4990-A94F-XXXXXXXXXXXX}   和APPID  {9CA88EE3-ACB7-47C8-AFC4-XXXXXXXXXXXX}   用户{Damain} {UserName} SID(S-1-5-21-174494438-4207865126-xxxxxxxxx-xxxxx)来自地址LocalHost(使用LRPC)在应用程序容器中运行的不可用SID(不可用)。可以使用组件服务管理工具修改此安全权限。

      还有其他选择可以让它发挥作用吗?

1 个答案:

答案 0 :(得分:1)

在下面发布David Noble的答案,以便其他人可以使用它:

GitHub issue #7990

请允许我自我介绍。我是Cosmos DB Emulator的开发者。谢谢你的写作。

要通过任务计划程序启动模拟器,请尝试使用以下命令行选项:/ noui。另请确保该任务在属于Administrators组的帐户下以最高权限运行。

我刚刚定义了这样一个在登录Windows 10开发框时运行的任务。它在我的域帐户下运行此命令行,该帐户属于本地Administrators组: “C:\ Program Files \ Azure Cosmos DB Emulator \ CosmosDB.Emulator.exe”/ noui

我确认当我执行此任务时:

•如果没有/ noui选项,我看到了您看到的错误:E_UNEXPECTED(0x8000FFFF),灾难性故障。

•使用/ noui选项,模拟器正确启动(没有任务栏图标,也没有按预期打开数据资源管理器),我可以使用数据资源管理器创建文档。

请试一试,让我们知道它是怎么回事。如果需要,我来帮忙。