Копирование файлов по сети через файловый ресурс, аутентификация пользователя

Я создаю консольную программу на .net C# для развертывания файла на файлообменном сервере windows (папка, которая находится в общем доступе). Путь таков :: \\\192.168.0.76\htdocs\public

При запуске я получаю ошибку:

[09:35:29]: [Step 1/3] Unhandled Exception: System.UnauthorizedAccessException: Access to the path '\\192.168.0.76\htdocs\public' is denied.
[09:35:29]: [Step 1/3]    at DeployFileShare.Program.CopyDir(String source, String dest, String[] exclude, Boolean overwrite)
[09:35:29]: [Step 1/3]    at DeployFileShare.Program.Deploy(String num, String source)
[09:35:29]: [Step 1/3]    at DeployFileShare.Program.Main(String[] args)
[09:35:29]: [Step 1/3] Process exited with code -532459699

Я думаю, что мне нужно аутентифицировать себя. Я сталкивался с этим:

AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);
WindowsIdentity idnt = new WindowsIdentity(username, password);
WindowsImpersonationContext context = idnt.Impersonate();

Я также пробовал:

AppDomain.CreateDomain("192.168.0.76").SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);
WindowsIdentity idnt = new WindowsIdentity("user", "pass");
WindowsImpersonationContext context = idnt.Impersonate();

Я не уверен, как это использовать. Когда я запускаю приложение, я получаю:

C:\Users\Administrator>DeployFileShare 1 R:\BuildOutput\_PublishedWebsites\Web 2
1
Deploy Started Web, version 21
-- Deploy Prepared
-- Deploying to 1

Unhandled Exception: System.Security.SecurityException: There are currently no l
ogon servers available to service the logon request.

   at System.Security.Principal.WindowsIdentity.KerbS4ULogon(String upn)
   at System.Security.Principal.WindowsIdentity..ctor(String sUserPrincipalName,
 String type)
   at DeployFileShare.Program.Authenticate(String server)
   at DeployFileShare.Program.Deploy(String num, String source)
   at DeployFileShare.Program.Main(String[] args)
The Zone of the assembly that failed was:
MyComputer

Вот основной код:

static void Main()
{
Copy();
}
static void Copy()
{
AppDomain.CreateDomain(GetServerInfo(server, "server")).SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);
            WindowsIdentity idnt = new WindowsIdentity(GetServerInfo(server, "user"), GetServerInfo(server, "pass"));
            WindowsImpersonationContext context = idnt.Impersonate();
string source = "C:\\someDir";
string dest = "\\192.168.0.76\shareFolder"
string[] sourceFiles = Directory.GetFiles(source, "*", SearchOption.AllDirectories);
            foreach (string file in sourceFiles)
            {
                string local = file.Replace(source, "");
                if (exclude.Contains(local))
                    continue;
                if (!Directory.Exists(Path.GetDirectoryName(dest + "\\" + local)))
                    Directory.CreateDirectory(Path.GetDirectoryName(dest + "\\" + local));
                File.Copy(file, dest + "\\" + local, overwrite);
                Console.WriteLine("-- -- [copied] {0} -> {1}", file, dest + "\\" + local);
            }
}

Система копирования кода в цикле for работает, я проверил ее на своей локальной системе.

Если кто-нибудь знает, как я должен использовать WindowsIdentity и WindowsIdentity, чтобы заставить это работать, пожалуйста, просветите меня. Я искал вокруг, и документация Window не очень-то помогает.

В принципе, как я могу копировать в удаленный каталог, находящийся в общем доступе, войдя в систему?

11
задан Burimi 17 November 2011 в 18:10
поделиться