Подключите сетевой диск с сервисом Python - PullRequest
0 голосов
/ 13 июля 2010

(Есть и другие вопросы в этом направлении, но ни на один из них нет реальных ответов, не говоря уже об ответах, касающихся питона ...)

У меня есть служба Windows (XP SP3), написанная на Python, которая должна быть в состоянии смонтировать сетевой диск для ВСЕХ пользователей. Я пытался использовать net use с subprocess (даже с полным путем к net.exe), но, учитывая, что ваша служба работает как пользователь SYSTEM, net довольно недоволен вами (жалуется на отсутствие пользователя контекст). Вероятно, есть способ сделать это через WMI, но я не смог понять это.

РЕДАКТИРОВАТЬ : На самом деле, возможно, вы не можете сделать это с WMI. Эта статья указывает на то, что эта функциональность доступна в WSH, но не в WMI. Может быть, какой-нибудь способ использовать net или map, чтобы все-таки это сделать?

1 Ответ

1 голос
/ 13 июля 2010

Э-э ... к сожалению, короткий ответ - нет. Если программа Python работает как служба Windows, здесь есть несколько сложностей ... поэтому позвольте мне объяснить.

Во-первых, чтобы даже разрешить самой сервисной программе доступ к сети, она должна быть запущена под учетной записью пользователя, которому разрешен доступ к сети. Учетная запись SYSTEM отсутствует (доступ ко всем сетям запрещен), но вы можете использовать учетную запись «NETWORK SERVICE» (которая в доменной среде действительно является учетной записью домена машины) или другую действительную учетную запись пользователя.

Но вы не сможете сопоставить диск в служебной учетной записи, потому что он не загружает данные профиля пользователя, которые включают в себя возможность «сопоставить» букву диска. (Ну, технически, если служба запускает пакетный файл CMD, этот сценарий может сопоставить букву диска и использовать ее, но тогда он не будет постоянным для следующего входа в систему ... но не обращайте на это внимания.) Вместо этого, все, что программа доступ к сети должен осуществляться через пути UNC (например, \ SERVERNAME \ SHARENAME).

Наконец, невозможно сделать так, чтобы сопоставление дисков работало «для всех пользователей» - сопоставленный диск уникален для каждого профиля пользователя (даже если он использует одну и ту же букву для указания на один и тот же общий ресурс сервера). Если на компьютере зарегистрировано несколько пользователей (например, на сервере терминалов или пользователь и служба работают под учетной записью другого пользователя), они не могут совместно использовать сопоставленный диск - каждый должен получить свой собственный.

Однако вы можете сделать что-то вроде этого: создать сценарий входа (или групповую политику и т. Д.), Который отображает диск с ожидаемой буквой (например, «M:») в общий ресурс сервера (\ server \ доля). Если этот скрипт запускается для каждого пользователя при входе в систему, все они будут иметь одинаковое отображение. Затем, когда вашей программе, выполняющейся как услуга, потребуется доступ к этому общему ресурсу, ей придется использовать пути UNC (и, конечно, учетную запись пользователя с соответствующими привилегиями).

Надеюсь, это поможет!

...