Я пишу службу Windows (Delphi XE2), которая вызывает функции из сторонней COM
библиотеки. Ядро библиотеки COM
довольно старое и требует, чтобы буква диска была сопоставлена с расположением его файлов данных. Совершенно не работает с UNC
путями. В моей службе я подключаю букву диска, когда служба запускается, чтобы убедиться, что она доступна. Я использую вызов WNetAddConnection2
API и проверяю возвращаемое значение. Диск подключается успешно, если буква диска уже не используется (ERROR_ALREADY_ASSIGNED
), но в любом случае функции COM работают нормально. Проблемы, которые у меня возникают, возникают при остановке службы. Если я отключу диск, когда служба остановится (WNetCancelConnection2
) и другие приложения / службы на сервере будут использовать букву диска, это повлияет на них и потеряет соединение. Однако, если я не отключу диск, когда служба остановится, диск будет «потерян» и недоступен для подключения другими службами.
Я уверен, что все это связано с тем, как сопоставления дисков «принадлежат» сеансу / сервису, который их создает, но я не уверен, какое решение является правильным. В настоящее время я запускаю службу в разделе "Локальная система". Я знаю, что Microsoft всегда рекомендовала, чтобы службы не использовали подключенные диски, но у меня просто нет выбора. Кто-нибудь сталкивался с этой проблемой раньше и есть какие-то рекомендации?