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