Является ли FileInfo.Copy по сети хорошим решением? Требуется ли CAS? - PullRequest
0 голосов
/ 06 мая 2009

Кажется, что все, что я делаю, включает в себя службы win, копирующие файлы между серверами. Кажется, я получаю много исключений типа security & securityaccess и никогда полностью не понимаю причины. Мне интересно, является ли fileinfo или file.copy хорошим решением или есть ли лучшее. Есть ли определенный атрибут, который я должен использовать, или что-то, чтобы избежать этих ошибок? Проблема не связана с учетной записью или паролем. Например, \ ipaddress \ sharename \ ipaddress \ drive \ path с использованием учетных записей домена.

--- Добавлен Конкретный пример .---
- Я вхожу на сервер A как домен \ имя пользователя. (включая доменное имя)
- Я открываю файл eplorer, в адресной строке введите \\ server B \ c $ \ folder, нажмите ввод, щелкните правой кнопкой мыши, создайте новый файл. Нет проблем.
- Я устанавливаю службу, захожу в свойства, выберите «Вход в систему», «Эта учетная запись» и задайте имя пользователя как домен \ имя пользователя (включая имя домена), тот же пароль, который я вошел на сервер A с. Он принимает это без проблем.
Приложение выполняет FileSystemWatcher на \\ server A и копирует на \\ server B при изменении, чтобы синхронизировать файлы конфигурации.

private void CopyNewFileToClone()  
{  
    FileInfo OriginalConfigFile = new FileInfo(Path.Combine(ConfigurationManager.AppSettings.Get("directoryToWatch"), ConfigurationManager.AppSettings.Get("fileToWatch")));  
    FileInfo CloneConfigFile = new FileInfo(Path.Combine(ConfigurationManager.AppSettings.Get("directoryToCopyTo"), ConfigurationManager.AppSettings.Get("fileToCopyTo")));
    FileInfo tmp = new FileInfo(Path.Combine(CloneConfigFile.DirectoryName,"~" + CloneConfigFile.Name));  

    OriginalConfigFile.CopyTo(tmp.FullName, true);  
    tmp.CopyTo(CloneConfigFile.FullName, true);  
    tmp.Delete();  
}  

Когда я запускаю сервис, я получаю, что Сервис не может быть запущен.
System.UnauthorizedAccessException: доступ к пути '\\ server B \ C $ \ folder \ filename' запрещен.

Ответы [ 2 ]

1 голос
/ 06 мая 2009

Я использую fileinfo для копирования файлов с серверов, и, похоже, работает нормально. Если вы уверены, что это не проблема с учетной записью или паролем, я бы начал просматривать ваш DNS. Если сеть не может определить, какая учетная запись пытается получить доступ к сетевой папке, не имеет значения, используете ли вы действительную учетную запись. Вам может в некоторых случаях повезти с кешированными учетными записями, но никто не знает, когда это может не сработать, а когда сработает.

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

0 голосов
/ 12 мая 2009

Это было связано с политикой безопасности доступа кода. Ран
c:\Windows\Microsoft.NET\Framework\v2.0.50727\CasPol.exe -af <path\application.exe>
и ошибка устранена.

Добавление в качестве шага установки во все приложения, которым требуется запись на HD, особенно по всей сети через unc, например \ server \ share \ file.

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