Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
14 / 14 / 0
Регистрация: 24.09.2015
Сообщений: 208
1

Чтение и запись данных в сетевую папку на удаленном сервере через интернет

04.08.2021, 17:37. Показов 2489. Ответов 13

Author24 — интернет-сервис помощи студентам
Всем доброго времени суток!

Столкнулся со следующей проблемой:
Имеем на удаленном сервере сетевую папку с доступом через логин и пароль.


VB.NET
1
2
3
4
5
6
7
8
Dim WebClient As New System.Net.WebClient()
Dim FullPatch As String = My.Settings.PathForLocalFile & "\" & NameFile
 
Dim PathFs As String =  TabPg.Text & "\" & NameFile
 
WebClient.Credentials = New NetworkCredential("я.почта@домен.com", "пАрОлИщЕ")
 
WebClient.DownloadFileAsync(New Uri(PathFs), FullPatch)
Пытаюсь таким способом скачать файл из сетевой папки.
Постоянно выдаёт "не верный логин или пароль".
При подключении в виндовс этой папки в качестве сетевого диска - всё работает без нареканий, т.е. путь, логин и пароль однозначно верны.
Если подключить в виндовс эту сетевую папку хотябы один раз а потом отключить, то всё работает и даже пароль не просит
Уже пробовал различные варианты и комбинации - толку 0.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.08.2021, 17:37
Ответы с готовыми решениями:

Чтение и запись MySQL базы данных находящейся на удаленном сервере
Ребята, как без костылей можно подключиться к БД на удаленном сервере средствами VB.NET? Программа...

Настройка удаленного доступа на сетевую папку на сервере
Приветствую знатоков! Нарезали задачу - настроить удаленный доступ из дома на сетевую папку,...

Чтение файла, расположенного на удаленном сервере
Собственно необходим кусок кода, который это делает. Зарание спасибо. П.С: помню, в паскале были...

запись в сетевую папку с локального компьютера
трабла офигенная: есть win2000AS+IIS - компьютер A, в IIS создан веб-сайт физически контент...

13
Администратор
Эксперт .NET
17019 / 13372 / 5217
Регистрация: 17.03.2014
Сообщений: 27,342
Записей в блоге: 1
04.08.2021, 19:18 2
Цитата Сообщение от Евгений_Пермь Посмотреть сообщение
Имеем на удаленном сервере сетевую папку с доступом через логин и пароль.
Речь о UNC папках - \\server\shared_folder?
0
14 / 14 / 0
Регистрация: 24.09.2015
Сообщений: 208
04.08.2021, 20:03  [ТС] 3
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Речь о UNC папках - \\server\shared_folder?
Думаю да
\\anssn.name.com\DOCS\NameFolder
0
Администратор
Эксперт .NET
17019 / 13372 / 5217
Регистрация: 17.03.2014
Сообщений: 27,342
Записей в блоге: 1
04.08.2021, 21:05 4
Евгений_Пермь, WebClient не умеет с такими работать. С ними же общение не через HTTP идет. В другой теме уже интересовались как это делать и я выкладывал там решение на C#. Если переведете на VB.NET, то не забудьте выложить сюда.
2
14 / 14 / 0
Регистрация: 24.09.2015
Сообщений: 208
04.08.2021, 21:09  [ТС] 5
Цитата Сообщение от OwenGlendower Посмотреть сообщение
WebClient не умеет с такими работать
Каким образом я тогда получаю доступ?
Что самое интересное, если я подключаю папку в качестве сетевого диска с вводом логина и пароля через мобильную точку доступа, то доступ есть, но если же я подключаюсь через роутер, то доступа нет...
Ну и как изначально написал, если не подключить хотябы один раз папку в качестве сетевого диска, то через веб клиента доступа тоже нет.
0
1976 / 1410 / 365
Регистрация: 26.06.2017
Сообщений: 4,009
04.08.2021, 22:19 6
Как просили (машинный перевод):
Кликните здесь для просмотра всего текста
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Dim token As IntPtr
If Not NativeMethods.LogonUser("userName", "domain", "Pa$$word", NativeMethods.LogonType.NewCredentials, NativeMethods.LogonProvider.[Default], token) Then
    Throw New Win32Exception()
End If
Try
    Dim tokenDuplicate As IntPtr
    If Not NativeMethods.DuplicateToken(token, NativeMethods.SecurityImpersonationLevel.Impersonation, tokenDuplicate) Then
        Throw New Win32Exception()
    End If
    Try
        Using impersonationContext As WindowsImpersonationContext = New WindowsIdentity(tokenDuplicate).Impersonate()
            impersonationContext.Undo()
        End Using
    Finally
        If tokenDuplicate <> IntPtr.Zero Then
             NativeMethods.CloseHandle(tokenDuplicate)
        End If
    End Try
Finally
    If token <> IntPtr.Zero Then
        NativeMethods.CloseHandle(token)
    End If
End Try


Кликните здесь для просмотра всего текста
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
Friend Shared Class NativeMethods
    Friend Enum LogonType As Integer
        Interactive = 2
        Network = 3
        Batch = 4
        Service = 5
        Unlock = 7
        NetworkCleartext = 8
        NewCredentials = 9
    End Enum
    Friend Enum LogonProvider As Integer
        [Default] = 0
        WinNT35 = 1
        WinNT40 = 2
        WinNT50 = 3
    End Enum
    Friend Enum SecurityImpersonationLevel As Integer
        Anonymous = 0
        Identification = 1
        Impersonation = 2
        Delegation = 3
    End Enum
    <DllImport("advapi32.dll", CharSet := CharSet.Unicode, SetLastError := True)> _
    Friend Shared Function LogonUser(userName As String, domain As String, password As String, logonType As LogonType, logonProvider As LogonProvider, ByRef token As IntPtr) As <MarshalAs(UnmanagedType.Bool)> Boolean
    End Function
    <DllImport("advapi32.dll", CharSet := CharSet.Unicode, SetLastError := True)> _
    Friend Shared Function DuplicateToken(existingTokenHandle As IntPtr, securityImpersonationLevel As SecurityImpersonationLevel, ByRef duplicateTokenHandle As IntPtr) As <MarshalAs(UnmanagedType.Bool)> Boolean
    End Function
    <DllImport("kernel32.dll", CharSet := CharSet.Unicode, SetLastError := True)> _
    Friend Shared Function CloseHandle(handle As IntPtr) As <MarshalAs(UnmanagedType.Bool)> Boolean
    End Function
End Class
2
14 / 14 / 0
Регистрация: 24.09.2015
Сообщений: 208
05.08.2021, 07:34  [ТС] 7
Цитата Сообщение от Uswer Посмотреть сообщение
Как просили (машинный перевод):
Как это применить?
Что этот код вообще делает?
0
Модератор
Эксперт .NET
4203 / 3287 / 497
Регистрация: 27.01.2014
Сообщений: 6,033
05.08.2021, 08:41 8
Евгений_Пермь, Вроде как этот код производит авторизацию вашего ПК с удаленным, как я понял. После чего, по идее, Вам можно с ним взаимодейсвовать.

Добавлено через 2 минуты
а вместо WebClient если обычым способом скопировать файл из папки, через IO или FileSystem? Хотя сомневаюсь, что прокатит.
0
14 / 14 / 0
Регистрация: 24.09.2015
Сообщений: 208
05.08.2021, 09:01  [ТС] 9
Цитата Сообщение от Yury Komar Посмотреть сообщение
а вместо WebClient если обычым способом скопировать файл из папки, через IO или FileSystem?
почему я использую именно WebClient?
Он позволяет отображать процесс загрузки и скачивания файла, это сыграло ключевую роль в выборе способа передачи файлов.
0
Модератор
Эксперт .NET
4203 / 3287 / 497
Регистрация: 27.01.2014
Сообщений: 6,033
05.08.2021, 09:29 10
Евгений_Пермь, понял, но можно воспользоваться WinAPI FileCopyEx и отображать прогресс копирования:
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
Public Class CopyFile_Ex
 
    Private Declare Auto Function CopyFileEx Lib "kernel32.dll" (ByVal lpExistingFileName As String, _
        ByVal lpNewFileName As String, ByVal lpProgressRoutine As CopyProgressRoutine, _
        ByVal lpData As IntPtr, ByRef pbCancel As Boolean, _
        ByVal dwCopyFlags As CopyFileFlags) As <MarshalAs(UnmanagedType.Bool)> Boolean
 
    Private Delegate Function CopyProgressRoutine(ByVal TotalFileSize As Long, _
        ByVal TotalBytesTransferred As Long, ByVal StreamSize As Long, ByVal StreamBytesTransferred As Long, _
        ByVal dwStreamNumber As UInteger, ByVal dwCallbackReason As CopyProgressCallbackReason, _
        ByVal hSourceFile As IntPtr, ByVal hDestinationFile As IntPtr, ByVal lpData As IntPtr) As CopyProgressResult
 
    Private CopyExSyncObject As New Object
 
    Private pbCancel As Boolean = False
    Private sourcePath As String
    Private destPath As String
    Private overWrite As Boolean
    Private complete As Boolean
    Private totalBytes As Int64
    Private ammountTransfered As Double
 
    Private Enum CopyProgressResult As UInteger
        PROGRESS_CONTINUE = 0
        PROGRESS_CANCEL = 1
        PROGRESS_STOP = 2
        PROGRESS_QUIET = 3
    End Enum
 
    Private Enum CopyProgressCallbackReason As UInteger
        CALLBACK_CHUNK_FINISHED = &H0
        CALLBACK_STREAM_SWITCH = &H1
    End Enum
 
    <Flags()> _
    Private Enum CopyFileFlags As UInteger
        COPY_FILE_FAIL_IF_EXISTS = &H1
        COPY_FILE_RESTARTABLE = &H2
        COPY_FILE_OPEN_SOURCE_FOR_WRITE = &H4
        COPY_FILE_ALLOW_DECRYPTED_DESTINATION = &H8
    End Enum
 
    Private Function GetFilenameFromPath(ByVal filePath As String, _
                Optional ByVal errMsg As String = "") As String
 
        If filePath.Contains("\") Then
        Dim parts() As String
        parts = Split(filePath, "\")
        Return parts(parts.Length - 1)
        Else
        Return ""
        End If
 
    End Function
 
    Public Sub New(ByVal _sourcePath As String, ByVal _destPath As String, ByVal _overWrite As Boolean)
        complete = True
        CopyEx(_sourcePath, _destPath, _overWrite)
    End Sub
 
    Public Sub New()
        complete = True
    End Sub
 
    Public Function GetBytesTransfered() As Int64
        SyncLock CopyExSyncObject
        GetBytesTransfered = CLng(ammountTransfered)
        End SyncLock
    End Function
 
    Public Function GetPercentComplete() As Integer
        SyncLock CopyExSyncObject
        GetPercentComplete = CInt((ammountTransfered / totalBytes) * 100)
        End SyncLock
    End Function
 
    Public Sub Cancel()
        SyncLock CopyExSyncObject
        pbCancel = True
        End SyncLock
    End Sub
 
    Public Function IsComplete() As Boolean
        SyncLock CopyExSyncObject
        IsComplete = complete
        End SyncLock
    End Function
 
    Public Sub CopyEx(ByVal _sourcePath As String, ByVal _destPath As String, ByVal _overWrite As Boolean)
 
        If Not complete Then Exit Sub
 
        sourcePath = _sourcePath
        destPath = _destPath
        overWrite = _overWrite
        complete = False
 
        totalBytes = 0
        ammountTransfered = 0
 
        Dim _theFilesInfo As New FileInfo(sourcePath)
        totalBytes = _theFilesInfo.Length
 
        Dim copyThread As New Threading.Thread(AddressOf StartCopy)
        copyThread.Start()
 
    End Sub
 
    Private Sub StartCopy()
        If overWrite Then
        CopyFileEx(sourcePath, destPath, New CopyProgressRoutine(AddressOf CopyProgressHandler), IntPtr.Zero, pbCancel, CopyFileFlags.COPY_FILE_OPEN_SOURCE_FOR_WRITE)
        Else
        CopyFileEx(sourcePath, destPath, New CopyProgressRoutine(AddressOf CopyProgressHandler), IntPtr.Zero, pbCancel, CopyFileFlags.COPY_FILE_FAIL_IF_EXISTS)
        End If
        complete = True
    End Sub
 
    Private Function CopyProgressHandler(ByVal total As Long, ByVal transferred As Long, ByVal streamSize As Long, ByVal StreamByteTrans As Long, ByVal dwStreamNumber As UInteger, ByVal reason As CopyProgressCallbackReason, _
     ByVal hSourceFile As IntPtr, ByVal hDestinationFile As IntPtr, ByVal lpData As IntPtr) As CopyProgressResult
 
        SyncLock CopyExSyncObject
        ammountTransfered = transferred
        End SyncLock
 
        If pbCancel Then
        complete = True
        ammountTransfered = 0
        pbCancel = False
        Return CopyProgressResult.PROGRESS_CANCEL
        Else
        Return CopyProgressResult.PROGRESS_CONTINUE
        End If
 
    End Function
 
    End Class
1
Администратор
Эксперт .NET
17019 / 13372 / 5217
Регистрация: 17.03.2014
Сообщений: 27,342
Записей в блоге: 1
05.08.2021, 10:58 11
Цитата Сообщение от Евгений_Пермь Посмотреть сообщение
Что этот код вообще делает?
Входит под указанным логином и паролем выполняю т.н. имперсонификацию (временное переключение в контекст другого пользователя).

Цитата Сообщение от Евгений_Пермь Посмотреть сообщение
Как это применить?
Размещаете свой код между 11-12 строками. Для читабельности лучше сделать вызов одного метода который делает всю работу.
2
14 / 14 / 0
Регистрация: 24.09.2015
Сообщений: 208
05.08.2021, 21:16  [ТС] 12
OwenGlendower, в общем не помогло.
Ситуация осталась ровно такой же.
В общем имеем следующее:

Если имеем подключение через мобильную точку доступа через телефон и на компьютере хотя бы один раз выполнялось подключение данной сетевой папки в качестве сетевого диска с вводом логина и пароля, то всё из кода работает без лишних заморочек, т.е. даже не требуется ввода логина и пароля.

Если же я подключаюсь через домашнюю сеть, т.е. через роутер, то выдаёт ошибку "сетевой путь не найден".

Если взять другой компьютер подключенный через мобильную сеть, но на котором ни разу не выполнялось подключение данной сетевой папки в качестве сетевого диска, то выдаёт сообщение "не верный логин или пароль".
0
14 / 14 / 0
Регистрация: 24.09.2015
Сообщений: 208
06.08.2021, 08:54  [ТС] 13
Нашел еще один ответ на вопрос.
Получить доступ к папке через приложение через мобильную сеть удаётся только в том случае, если был сохранён пароль в учётных данных Windows.
Если удаляю пароль оттуда, то при попытке получить доступ из кода, WebClient выдаёт исключение, что не верный логин или пароль.
Вот кстати аналогичный вопрос:
https://stackoverflow.com/ques... d-password
1
Модератор
Эксперт .NET
4203 / 3287 / 497
Регистрация: 27.01.2014
Сообщений: 6,033
06.08.2021, 09:17 14
Евгений_Пермь, может здесь есть полезная инфа, правда там про ASP.NET, но, думаю смвсл тот же.
1
06.08.2021, 09:17
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.08.2021, 09:17
Помогаю со студенческими работами здесь

Запись в файл на удалённом сервере
Доброе время суток! У меня есть задача периодически дописывать данные в csv файл, который...

Сеть (ЛВС, локалка) + Интернет (ВПН,общедоступный интернет ) на второй компьютер через интегрированую сетевую плату
Имеется два компютера КОМП1 и КОМП2, в компе1 ( главный ) две сетевые платы, в одну входит интрнет...

Как подключить сетевую папку в xp через консоль?
Как сетевой диск подключить я знаю через NET USE * http://servername/fs/ password /USER:username...

Открыть программно (через explorer.exe) сетевую папку C$
Здравствуйте! Имеется следующая задача: Есть несколько хостов \\hostname1\, \\hostname2\ …...

Запись/чтение на удаленном компьютере с паролем
Мне нужно подсоединиться к компьютеру на котором установлен пароль(логин пароль я знаю), для...

Чтение и запись файлов на удаленном компьютере
Как послать с моего компютера на другой компютер файл, и ишьо как винять оттуда файл? Не примите за...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru