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

Sha*_*ath 4 azure

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

作为这项工作的一部分,我们需要某种方式来启动和停止这两个模拟器。我们曾尝试在 Docker 上运行,但由于防病毒干预等原因,它有其自身的问题,所以我不想在这篇文章中谈论该选项。

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

从那以后,我尝试了其他一些选项,如下所示:

  1. 使用以下命令创建一个批处理文件并通过任务计划程序运行它: start /d "C:\Program Files\Azure Cosmos DB Emulator" CosmosDB.Emulator.exe

当我手动运行批处理文件而不是通过任务调度程序时,这有效。

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

  2. 最后,我使用 Topshelf 创建了一个 Windows 服务,该服务在使用 Visual Studio 或调试代码运行时再次起作用,但在我安装服务并在服务控制台中运行时不起作用。

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

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

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

有没有其他选择可以让这个工作?

Sha*_*ath 5

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

GitHub 问题 #7990

请允许我自我介绍。我是 Cosmos DB 模拟器的开发所有者。谢谢你的写作。

要通过任务调度程序启动模拟器,请尝试使用以下命令行选项:/noui。还请确保任务在属于管理员组的帐户下以最高权限运行。

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

我确认当我运行这个任务时:

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

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

请试一试,让我们知道它是怎么回事。如果需要,我会在这里提供帮助。