команда net use в службе Windows - PullRequest
12 голосов
/ 11 ноября 2008

Мы используем следующую командную строку из службы Windows, разработанной на C # .Net Framework 1.1:

net use z: \\myComputer\c$

Служба работает под учетной записью домена, которая является локальным администратором на «myComputer». После отладки кода мы видим, что он не возвращает никаких ошибок, но диск «z:» никогда не отображается. Мы попробовали точно такой же код из консольного приложения, и он работает правильно. Что нужно добавить в Сервис, чтобы эта работа работала?

Код, который мы используем, включен ниже.

С уважением,
Sergio

startInfo.FileName = "net";  
startInfo.Arguments = string.Format(@"use {0}: \\{1}\{2}", driveLetter,
                                    computerName, folder).Trim();  
startInfo.UseShellExecute = false;  
startInfo.RedirectStandardError = true;

proc.EnableRaisingEvents = false;  
proc.StartInfo = startInfo;

proc.Start();

// If there is an error during the mapping of the drive, it will be read
// from the StandardError property which is a StreamReader object and
// be fed into the error output parameter.  
using(StreamReader errorReader = proc.StandardError)  
{  
         string standardError = string.Empty;  
    while((standardError = errorReader.ReadLine()) != null)  
    {  
        error += standardError + " ";  
    }  
}  
proc.WaitForExit();  

Ответы [ 5 ]

16 голосов
/ 11 ноября 2008

С http://msdn.microsoft.com/en-us/library/ms685143.aspx:

Служба (или любой процесс, запущенный в другой контекст безопасности), который должен доступ к удаленному ресурсу следует использовать Конвенция об универсальных именах (UNC) имя для доступа к ресурсу. сервис должен иметь соответствующий привилегии для доступа к ресурсу. Если серверная служба использует RPC подключение, делегирование должно быть включено на удаленном сервере.

Буквы дисков не являются глобальными для система. Каждый сеанс входа получает свой собственный набор букв дисков от А до Z. Следовательно, перенаправленные диски не могут быть разделенным между запущенными процессами под разными учетными записями пользователей. Более того, услуга (или любой процесс работает в своем сеансе входа в систему) не может получить доступ к буквам дисков, которые были созданы в рамках другого сеанс входа в систему.

Сервис не должен иметь прямой доступ локальные или сетевые ресурсы через сопоставленные буквы дисков, и не должен вызовите команду net use для сопоставления диска буквы во время выполнения.

1 голос
/ 11 ноября 2008

Вы не можете получить доступ к свойствам пользователя из службы Windows (включая HKEY-CURRENT-USER из реестра), поскольку служба не работает как зарегистрированный пользователь.

Сопоставленные диски являются частью пользовательских настроек, поэтому вы не можете использовать их в качестве службы, если не покопаетесь, чтобы вручную найти свойства пользователя в реестре, сопоставить диски в вашей службе и т. Д. Это боль.

То, что вы можете попробовать и сделать, это задать вопрос о том, как ваша служба выполняет последовательность входа в систему (вероятно, некоторые .EXE). Это может сделать это для вас.

Надеюсь, это поможет, Алан.

0 голосов
/ 25 июля 2012

Я делал что-то похожее на вход на удаленный сервер, но без подключенной части диска. Я не люблю использовать подключенные диски; то есть в программах я постоянно пользуюсь subst для удобства. В любом случае, мне просто нужно было включить

use \\server\c$ /user:admin password

или каков ваш пользователь / пароль, который имеет доступ к удаленному серверу, тогда не имеет значения, что служба вошла в систему как.

0 голосов
/ 11 ноября 2008

Я подозреваю, что это потому, что служба не работает в контексте локального пользователя. Насколько я помню, вы можете настроить службу Windows много лет назад для «взаимодействия с рабочим столом» или чего-то подобного.

0 голосов
/ 11 ноября 2008

Возможно, вам необходимо указать учетную запись, используемую для входа в систему. Введите net use /? в командной строке, чтобы получить справку по настройке этой команды.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...