2015-02-22 5 views
0

Я пытаюсь загрузить файл с моего ПК на удаленный сервер с помощью формы выигрыша, и я получаю следующую ошибку: Ошибка входа в систему: неизвестное имя пользователя или неверный пароль. На моем компьютере я использую пользователя своего домена и загружаю файл локального пользователя удаленного сервераC# Ошибка регистрации формы Windows

Я основал, что мне нужно олицетворять моего пользователя, но я до сих пор не понял, как я олицетворяю NetworkCredential.

Это мой код:

if (tbUsername.Text != string.Empty && tbPassword.Text != string.Empty && userSelectedFilePath != string.Empty) 
{ 
    try 
    { 
     using (WindowsIdentity.GetCurrent().Impersonate()) 
     { 
      WebClient client = new WebClient(); 

      NetworkCredential nc = new NetworkCredential("\\\\" + targetServer.Host + "\\" + tbUsername.ToString(), tbPassword.ToString()); 

      client.Credentials = nc; 
      client.UploadFile(targetServer, filepath); 
      MessageBox.Show("the file was successfully uploaded", "information", MessageBoxButtons.OK, MessageBoxIcon.Information); 
     } 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
    } 
} 
else 
{ 
    MessageBox.Show("One of the fields is empty", "Fields Empty", MessageBoxButtons.OK, MessageBoxIcon.Error); 
} 
+1

почему вы олицетворение затем с помощью networkcredentials? который отменяет друг друга. использовать один или другой - не имеет смысла использовать оба! Вы прочитали документацию для NetworkCredential? вы указываете ему имя пользователя и пароль, а не тип элемента управления. у вас есть «tbUsername.ToString()» - это неверно. это должно быть tbUsername.Text ... то же самое для tbPassword –

+0

Вы правы, я пропустил эту строку, но она по-прежнему не работает. –

ответ

0

выполнить следующие шаги:

Open 'Панель управления'

Выбрать 'Администрирование'

Open 'Локальная политика безопасности'

На левой панели перейдите в раздел «Настройки безопасности» => «Локальная политика» эс => „Параметры безопасности“

На правой панели находке „Сетевой доступ: модель совместного доступа и безопасности для локальных учетных записей“

Дважды щелкните на нем, чтобы изменить

установите ' Classic - местные пользователи аутентифицируются как сами себя.

+0

Этот параметр уже установлен в «Классический - местные пользователи аутентифицируются как сами». –

0

Я переписал раздел своего кода, и теперь он отлично работает. Он теперь выглядит так:

    IntPtr admin_token = default(IntPtr); 
        WindowsIdentity wid_current = WindowsIdentity.GetCurrent(); 
        WindowsIdentity wid_admin = null; 
        WindowsImpersonationContext wic = null; 

        if ((LogonUser(tbUsername.Text, targetServer.Host, tbPassword.Text, 9, 0, ref admin_token)) != 0 || (LogonUser(tbUsername2.Text, targetServer.Host, tbPassword2.Text, 9, 0, ref admin_token)) != 0) 
        { 
         wid_admin = new WindowsIdentity(admin_token); 
         wic = wid_admin.Impersonate(); 
        }