Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Копирование файла на сетевой ресурс


Автор: CrHD 11.3.2012, 08:48
Приветствую.
Имеем сетевой ресурс, и одну учетку, имеющую права на запись файлов в эту расшареную папку.
Рядовые пользователи прав на запись в эту папку не имеют. В систему необходимо добавить возможность, чтобы пользователь, через программу, мог бы добавить документ на сервер.
Т.е. чтобы при добавлении пользователем нового документа, программа записывала файл на серв под логином и паролем учетки, которая имеет права на запись в этот ресурс.
Ибо раздавать всем пользователям права на запись в этот ресурс нецелесообразно.
Каким образом подобное возможно организовать?
Заранее благодарю за советы.

Автор: mihryak 11.3.2012, 11:24
http://forum.vingrad.ru/index.php?showtopic=306772&view=findpost&p=2196085
в топике много срача не по теме, но разные варианты ответов в сообщении по ссылке есть

Автор: CrHD 11.3.2012, 12:50
Спасибо, почитал.

Пытаемся через WNetAddConnection2 - выпадаем в "Множественное подключение к серверу или к общим ресурсам одним пользователем с использованием более одного имени пользователя не разрешено"
Код

public NetworkConnection(string networkName, NetworkCredential credentials)
        {
            _networkName = networkName;

            var netResource = new NetResource
            {
                Scope = ResourceScope.GlobalNetwork,
                ResourceType = ResourceType.Disk,
                DisplayType = ResourceDisplaytype.Share,
                RemoteName = networkName.TrimEnd('\\')
            };

            var result = WNetAddConnection2(
                netResource, credentials.Password, credentials.UserName, 0);

            if (result != 0)
            {
                throw new Win32Exception(result);
            }


Туда же выпадаем и если просто пытаемся подключить сетевой диск (ручками подключается на легке)
Код

        WshNetwork network = new WshNetwork();
                object save = false;
                object user = "login", pass = "password";
                network.MapNetworkDrive("V:", @"\\server\public", ref save, ref user, ref pass);

                
Если юзаем имперсонализацию - происходит "Неизвестная ошибка 1346"
Код

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


Я так полагаю, с админами нужно будет дело решать то?.. >_<'

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)