Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.04.2016, 16:19   #1
Obey177
Форумчанин
 
Регистрация: 29.08.2010
Сообщений: 159
По умолчанию Залогиниться в сети и получить доступ к папке

Здравствуйте, проблема такая есть папка которая на одном из компьютеров в сети, пытаюсь считать что в ней есть, получаю ошибку доступа, попытался залогиниться, получилось, но всеравно получаю ту же ошибку доступа...
Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace ActCompare
{
    public partial class Form1 : Form
    {
        //переменные
        public static List<string> list = new List<string>();
        public static string server;
        //переменные
        public Form1()
        {
            InitializeComponent();
        }
        //указываем путь к конфигурации
        private void fConfBtn_Click(object sender, EventArgs e)
        {
            var ofd = new OpenFileDialog();
            ofd.Filter = "Cursor Files|*.ini";
            if (ofd.ShowDialog() == DialogResult.OK)
            {
                fConfText.Text = ofd.FileName;
            }
        }
        //загрузка конфигурации
        private void uploadBtn_Click(object sender, EventArgs e)
        {
            //загрузка контролируемых приложений
            string[] ReadKey;
            var iniF = new ini_parser(fConfText.Text);
            server = iniF.GetSetting("ControlVersion", "Server");
            ReadKey = iniF.EnumSection("AppCtrl");
            for(int i=1;i<ReadKey.Length+1;i++)
            {
                string prop = "Path" + i;
                string value = iniF.GetSetting("AppCtrl", prop);
                contrlProg.Items.Add(value);
            }
            //загрузка уонтроля версий для клиента
            writeLBox("ControlVersion", "Client","ClientPath", contrlVersClient, iniF);
            //загрузка уонтроля версий для сервера
            try
            {
                writeLBox("ControlVersion", "Server", "ServerPath", contrlVersServer, iniF);
            }
            catch (UnauthorizedAccessException)
            {
                Form aut = new Form2();
                aut.ShowDialog();

                writeLBox("ControlVersion", "Server", "ServerPath", contrlVersServer, iniF);
                
            }
        }

        //метод записи в listbox
        private void writeLBox(string selection,string key,string path,ListBox listb,ini_parser iniF)
        {
            list = FileSearchFunction("\\\\" + iniF.GetSetting(selection, key) + iniF.GetSetting(selection, path));
            for (int i = 0; i < list.Count; i++)
            {
                string value = list[i];
                listb.Items.Add(value);
            }
            list.Clear();
        }
        //функция возвращающая список всех файлов
        private List<string> FileSearchFunction(string Dir)
        {
            System.IO.DirectoryInfo DI = new System.IO.DirectoryInfo(Dir);
            System.IO.DirectoryInfo[] SubDir = DI.GetDirectories();
            for (int i = 0; i < SubDir.Length; ++i) this.FileSearchFunction(SubDir[i].FullName);
            System.IO.FileInfo[] FI = DI.GetFiles();
            for (int j = 0; j < FI.Length; ++j) list.Add(FI[j].FullName);
            return list;
        }

        
    }
}
Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace ActCompare
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }

        private void autBtn_Click(object sender, EventArgs e)
        {
            Form2 Ichild = new Form2();
            string login = loginTBox.Text;
            string password = passwordTBox.Text;
            string domain = Form1.server;
            if (!LogOn(domain,login,password))
            {
                Ichild.Close();
                MessageBox.Show("Не верные данные", "Ошибка");
            }
            else
            {
                Ichild.Close();
                MessageBox.Show("Вы успешно авторизировались", "12");
            }
            
        }
        [DllImport("advapi32.dll")]
        private static extern bool LogonUser(String lpszUsername, String lpszDomain, String lpszPassword, int dwLogonType, int dwLogonProvider, out int phToken);

        public bool LogOn(String sDomain, String sUser, String sPassword)
        {
            int token1, ret;
            int attmpts = 0;
            bool LoggedOn = false;
            int LOGON32_LOGON_NEW_CREDENTIALS = 9;
            int LOGON32_PROVIDER_DEFAULT = 0;

            while (!LoggedOn && attmpts < 2)
            {
                LoggedOn = LogonUser(sUser, sDomain, sPassword, LOGON32_LOGON_NEW_CREDENTIALS, LOGON32_PROVIDER_DEFAULT, out token1);
                if (LoggedOn) return (true);
                else
                {
                    return (false);
                }
            }
            return (false);
        } 
    }
}
Это код двух форм, одна основная в которой все элементы, вторая что бы залогиниться...
Obey177 вне форума Ответить с цитированием
Старый 14.04.2016, 12:24   #2
Obey177
Форумчанин
 
Регистрация: 29.08.2010
Сообщений: 159
По умолчанию

Не ужели никто не знает, как это сделать?
Obey177 вне форума Ответить с цитированием
Старый 15.04.2016, 17:29   #3
Скарам
Дружите с Linq ;)
Форумчанин
 
Аватар для Скарам
 
Регистрация: 15.10.2008
Сообщений: 822
По умолчанию

Код:
        [DllImport( "advapi32.dll", SetLastError = true )]
        public static extern bool LogonUser( string lpszUsername, string lpszDomain, string lpszPassword, int dwLogonType, int dwLogonProvider, out IntPtr phToken );

        public void Copy()
        {
            AppDomain.CurrentDomain.SetPrincipalPolicy( PrincipalPolicy.WindowsPrincipal );

            IntPtr token;
            if ( LogonUser( "username", "domain", "password", 4, 0, out token ) )
            {
                var identity = new WindowsIdentity( token );

                var context = identity.Impersonate();

                try
                {
                    File.Copy( @"c:\temp\MyFile.txt", @"\\server\folder\Myfile.txt", true );
                }
                finally
                {
                    context.Undo();
                }
            }
        }
Попробуй такой код подогнать и скажи, что получиться с полным текстом ошибки
Не давай организму поблажки, каждый день тренируй его в шашки..
Скарам вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как доступ из внешней сети получить для локального сервера? Hottsb13 Помощь студентам 11 16.03.2016 12:49
Сети - частично пропал доступ к компьютерам в сети abstractionhawk Windows 6 07.04.2015 02:53
Как получить доступ к папке на сервере lioon Microsoft Office Excel 1 01.09.2014 17:46
запретить доступ к папке Rolls БД в Delphi 2 11.06.2010 16:05
Как получить доступ к файлу в локальной сети. DV-Karpov Работа с сетью в Delphi 2 18.11.2008 21:53