Кажется, что все, что я делаю, включает в себя службы 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' запрещен.