我正在编写一个调用第三方库中的函数的 Windows 服务( Delphi XE2 )。COM
该COM
库的核心非常古老,需要将驱动器号映射到其数据文件的位置。它绝对不适用于UNC
路径。在我的服务中,我在服务启动时连接驱动器号以确保它可用。我正在使用WNetAddConnection2
API 调用,并检查返回值。驱动器已成功连接,除非驱动器号已在使用中 ( ERROR_ALREADY_ASSIGNED
),但无论哪种情况,COM 功能都可以正常运行。我遇到的问题源于服务停止时。如果我在服务停止时断开驱动器(WNetCancelConnection2
) 和服务器上的其他应用程序/服务正在使用驱动器号,然后它们会受到影响并失去连接。但是,如果在服务停止时我没有断开驱动器,则驱动器“丢失”并且无法被其他服务连接。
我确信这与创建驱动器映射的会话/服务如何“拥有”驱动器映射有关,但我不确定正确的解决方案是什么。我目前正在'Local System'下启动服务。我知道微软一直建议服务不要使用映射驱动器,但我别无选择。有没有人遇到过这个问题并有任何建议?