Вопрос : Using wininet.dll с Кодим vba в пределах макроса Эксел 2003 на сервере R2 окон 2008. Виды FTP

Мы используем интерфейс программирования приложений интернета Windows (WinINet) (wininet.dll) с следующий Кодим VBA в Мичрософт Ехчел 2003 Ехчел на конечном сервере R2 сервера 2008 Windows.  Он висит на 20-45 секунд после исполнять линию blnRc = FtpPutFile (lngINetConn, OutFile1, txt, 1, 0) но все еще завершает положенный FTP.  На нашем Windows XP /2003 подвергает положенный FTP механической обработке бега мгновенно и не делает lngINet

hang.
тусклое как lngINet Long
=
InternetOpen («ServerName», 1, vbNullString, vbNullString, 0) затемняет lngINetConn как
lngINetConn Long
=
InternetConnect (lngINet, сервера, 0, потребитель, pwd, 1, 0, 0) затемняет blnRc как blnRc
blnRc Boolean
=
FtpPutFile (lngINetConn, OutFile1, txt, 1, 0) =
FtpDeleteFile (lngINetConn, журнала ) blnRc =
FtpDeleteFile (lngINetConn, браков ) blnRc =
FtpDeleteFile (lngINetConn, размышляет) lngINet
lngINetConn
InternetCloseHandle

InternetCloseHandle конечно если оно делает разницу но сервера оно, то будут FTPing к будут rel= " nofollow "» _blank»» target= " http://msdn.microsoft.com/en-us/library/aa383630(v=VS.85).aspx href=
Сун Соларис 10 box.
> en-us/library/aa383630 http://msdn.microsoft.com/ (v=VS.85) .aspx
class=

Ответ : Using wininet.dll с Кодим vba в пределах макроса Эксел 2003 на сервере R2 окон 2008. Виды FTP

Здесь вы имеете выдвинутый вариант FtpPutFile… (FtpPutFileEx) изготовленный на заказ метод может высчитать данные по байта для прогресса так же, как сообщения насоса к UI.

Использование:
 FtpPutFileEx «ftp.server.com», «потребитель», «пропуск», «c:\windows\system32\calc.exe»,» /TEST/calc.exe "

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:
Вариант точный
'egl1044
Приватное Const BUF_SIZE = буфер невыполнения обязательства 4096 '4KB для FTP
 
Приватное Const INVALID_HANDLE_VALUE = (- 1)
Приватное Const OPEN_EXISTING = &H3&
Приватное Const GENERIC_READ = &H80000000
Приватное Const GENERIC_WRITE = &H40000000
Приватное Const INTERNET_OPEN_TYPE_PRECONFIG = 0
Приватное Const INTERNET_SERVICE_FTP = 1
Приватное Const INTERNET_DEFAULT_FTP_PORT = 21
Приватное Const FTP_TRANSFER_TYPE_UNKNOWN = 0
 
Приватно объявите свободу «kernel32» CreateFileW функции (lpFileName ByVal как dwDesiredAccess длиной, ByVal как dwShareMode длиной, ByVal как lpSecurityAttributes длиной, ByVal как dwCreationDisposition длиной, ByVal как dwFlagsAndAttributes как длиной, ByVal длиной, ByVal hTemplateFile как длиной) как длиной
Приватно объявите свободу «kernel32» ReadFile функции (ByVal hFile как длиной, lpBuffer ByVal как длиной, nNumberOfBytesToRead ByVal как длиной, lpNumberOfBytesRead ByRef как длиной, ByVal lpOverlapped как длиной) как длиной
Приватно объявите свободу «kernel32» CloseHandle функции (hObject ByVal как длиной) как длиной
Приватно объявите свободу «wininet» InternetOpenW функции (ByVal lpszAgent как dwAccessType длиной, ByVal как lpszProxyName длиной, ByVal как lpszProxyBypass длиной, ByVal как dwFlags длиной, ByVal как длиной) как длиной
Приватно объявите свободу «wininet» InternetConnectW функции (hInternetSession ByVal как sServerName длиной, ByVal как nServerPort длиной, ByVal как sUsername длиной, ByVal как sPassword длиной, ByVal как lService длиной, ByVal как lFlags длиной, ByVal как lcontext длиной, ByVal как длиной) как длиной
Приватно объявите свободу «wininet» InternetWriteFile функции (ByVal hFile как длиной, lpBuffer ByVal как длиной, dwNumberOfBytesToWrite ByVal как длиной, ByRef lpdwNumberOfBytesWritten как длиной) как длиной
Приватно объявите свободу «wininet» InternetCloseHandle функции (hInternet ByVal как длиной) как длиной
Приватно объявите свободу «wininet» FtpOpenFileW функции (hConnect ByVal как lpszFileName длиной, ByVal как dwAccess длиной, ByVal как dwFlags длиной, ByVal как dwContext длиной, ByVal как длиной) как длиной
Приватно объявите свободу «kernel32» GetFileSize функции (ByVal hFile как lpFileSizeHigh длиной, ByRef как длиной) как длиной

Затемните буфер (BUF_SIZE) как байт
Затемните dwReadBytes как длиной
Затемните dwWrittenBytes как длиной
Тускло hOpen как длиной
Затемните hConnect как длиной
Затемните hInternet как длиной
Затемните hFile как длиной
 
 
Общественное Sub FtpPutFileEx (_
  szServer ByVal как шнур, _
  szUser ByVal как шнур, _
  szPassword ByVal как шнур, _
  ByVal szLocalFile как шнур, _
  ByVal szServerFile как шнур)
  
  Тусклое dwStatus как длиной
  Тускло dwLoFileSize как длиной
  Тускло dwHiFileSize как длиной
  Затемните dwPercent как длиной
  
  '/init
  hOpen = InternetOpenW (0, INTERNET_OPEN_TYPE_PRECONFIG, 0, 0, 0)
   
  '/соединитесь к серверу ftp
  hConnect = InternetConnectW (hOpen, StrPtr (szServer), INTERNET_DEFAULT_FTP_PORT, StrPtr (szUser), StrPtr (szPassword), INTERNET_SERVICE_FTP, 0, 0)
   
  Если hConnect = 0 после этого
    Ыборка
    Debug.Print «InternetConnectW ()» & Err.LastDllError
    Выходите подводная лодка
  Закончитесь если
   
  '/получите ручку для filename будет написан к серверу ftp
  hInternet = FtpOpenFileW (hConnect, StrPtr (szServerFile), GENERIC_WRITE, FTP_TRANSFER_TYPE_UNKNOWN, 0)
   
  Если hInternet = 0 после этого
    Ыборка
    Debug.Print «FtpOpenFile ()» & Err.LastDllError
    Выходите подводная лодка
  Закончитесь если
   
  '/получите, что ручку для местного архива прочитать байты
  hFile = CreateFileW (StrPtr («\ \? \» & szLocalFile), GENERIC_READ, 0, 0, OPEN_EXISTING, 0, 0)
   
  Если hFile = INVALID_HANDLE_VALUE после этого
    Ыборка
    Debug.Print «CreateFileW ()» & Err.LastDllError
    Выходите подводная лодка
  Закончитесь если
  
  '// получает местный размер архива для прогресса. Поддержки этого примера
  '    только до 2GB прогресса отчетность состояния.
  dwLoFileSize = GetFileSize (hFile, dwHiFileSize)
  
  '/прочитайте местный архив, напишите байты архива сервера
  Сделайте
    Если ReadFile, то (hFile, VarPtr (буфер (0)), BUF_SIZE, dwReadBytes, 0) после этого
      Если InternetWriteFile, то (hInternet, VarPtr (буфер (0)), dwReadBytes, dwWrittenBytes) после этого
        'Отслеживайте количество написанных байт и процента.
        dwStatus = (dwStatus + dwWrittenBytes)
        dwPercent = (dwStatus/dwLoFileSize) * 100
        'Label1.Caption = dwPercent
      Закончитесь если
    Еще
      Выход делает
    Закончитесь если
    DoEvents
  Не закрепить петлеть до dwReadBytes = 0
   
  «Сделанные» Debug.Print
  '/ыборка
  Ыборка
  Буфер Erase
   
  
Подводная лодка конца
 
Приватная Sub ыборка ()
   
  Если hOpen <> 0 после этого
    InternetCloseHandle hOpen
    hOpen = 0
  Закончитесь если
  Если hConnect <> 0 после этого
    hConnect InternetCloseHandle
    hConnect = 0
  Закончитесь если
  Если hInternet <> 0 после этого
    hInternet InternetCloseHandle
    hInternet = 0
  Закончитесь если
  Если hFile > 0 после этого
    CloseHandle hFile
    hFile = INVALID_HANDLE_VALUE
  Закончитесь если
   
Закончите подводную лодку
Другие решения  
  •  Как я добавляю кнопки на форме PDF для того чтобы добавить/извлекаю рядки данных?
  •  Шнур ошибки в блоке задвижки?
  •  сколько вариант сервера SQL на одной машине
  •  Внешний вид 2007 не может архивный файл открытой сети сохраненный
  •  Активно директория DNS записывает вопрос
  •  Отчет о доступа 2010 экспорта к CSV с коллекторами?
  •  Прокладчик OCE 9400 не начинает
  •  как добавить десятичное место в формуле в отчете о кристалла seagate
  •  Windows XP и Мичрософт Оутлоок и проблемы установителя Windows
  •  VB6 к VS2010 - консультации тренировки?
  •  
    programming4us programming4us