2008-11-11 2 views
9

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

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(); 

ответ

0

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

0

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

14

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

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

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

Служба не должна непосредственно доступ локальные или сетевые ресурсы с помощью отображенных букв и не должно вызвать команду NET USE для отображения диска письма во время выполнения.

1

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

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

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

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

0

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

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

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

Смежные вопросы