Pytanie : Using wininet.dll z vba kod Przodować 2003 macro na okno 2008 R2 serwer. FTP zrozumienie

My używać the the Windows Internetowy (WinINet) podaniowy programowanie interfejs (wininet.dll) z the następujący VBA kod w Microsoft Przodować 2003 bieg na Windows Serwer 2008 R2 Terminal Serwer.  Ono wieszać dla 20-45 sekunda po the kreskowy blnRc = FtpPutFile (lngINetConn, OutFile1, txt, (1), (0)) ale wciąż uzupełniać the FTP stawiać.  Na nasz Windows XP/2003 maszyna the FTP stawiać biegać stawiać i hang.


Ciemnawy lngINet Gdy Long
lngINet = InternetOpen ("ServerName", (1), vbNullString, vbNullString, (0))
Ćmić lngINetConn Gdy Long
lngINetConn = InternetConnect (lngINet, serwer, (0), użytkownik, pwd, (1), (0), (0))

Ćmić blnRc Jako Boolean
blnRc = FtpPutFile (lngINetConn, OutFile1, txt, (1), (0))

blnRc = FtpDeleteFile (lngINetConn, bela)
blnRc = FtpDeleteFile (lngINetConn, odrzut)
 blnRc = FtpDeleteFile (lngINetConn, rozumować)


InternetCloseHandle lngINetConn
InternetCloseHandle lngINet
Pewny jeżeli ono robić różnica ale the serwer ono być FTPing być słońce solaris 10 box.


http://msdn.microsoft.com/ en-us/library/aa383630 (v=VS.85) .aspx

Odpowiedź : Using wininet.dll z vba kod Przodować 2003 macro na okno 2008 R2 serwer. FTP zrozumienie

Tutaj ty mieć rozszerzony wersja FtpPutFile… (FtpPutFileEx) obyczajowy metoda który móc the bajt informacja dla postęp as well as pompowy wiadomość the UI.

Użycie:
 FtpPutFileEx "ftp.server.com", "użytkownik", "przepustka", "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:
Opcja Wyraźny
'egl1044
Intymny Const BUF_SIZE = 4096 '4KB brak odbojnica dla FTP
 
Intymny Const INVALID_HANDLE_VALUE = (- (1))
Intymny Const OPEN_EXISTING = &H3&
Intymny Const GENERIC_READ = &H80000000
Intymny Const GENERIC_WRITE = &H40000000
Intymny Const INTERNET_OPEN_TYPE_PRECONFIG = (0)
Intymny Const INTERNET_SERVICE_FTP = (1)
Intymny Const INTERNET_DEFAULT_FTP_PORT = 21
Intymny Const FTP_TRANSFER_TYPE_UNKNOWN = (0)
 
Intymny Oznajmiać Funkcja CreateFileW Wyzwolenie "kernel32" (ByVal lpFileName Długo, ByVal dwDesiredAccess Długo, ByVal dwShareMode Długo, ByVal lpSecurityAttributes Długo, ByVal dwCreationDisposition Długo, ByVal dwFlagsAndAttributes Długo, ByVal hTemplateFile Długo) Długo
Intymny Oznajmiać Funkcja ReadFile Wyzwolenie "kernel32" (ByVal hFile Długo, ByVal lpBuffer Długo, ByVal nNumberOfBytesToRead Długo, ByRef lpNumberOfBytesRead Długo, ByVal lpOverlapped Tęsknić) Długo
Intymny Oznajmiać Funkcja CloseHandle Wyzwolenie "kernel32" (ByVal hObject Długo) Długo
Intymny Oznajmiać Funkcja InternetOpenW Wyzwolenie "wininet" (ByVal lpszAgent Długo, ByVal dwAccessType Długo, ByVal lpszProxyName Długo, ByVal lpszProxyBypass Długo, ByVal dwFlags Długo) Długo
Intymny Oznajmiać Funkcja InternetConnectW Wyzwolenie "wininet" (ByVal hInternetSession Długo, ByVal sServerName Długo, ByVal nServerPort Długo, ByVal sUsername Długo, ByVal sPassword Długo, ByVal lService Długo, ByVal lFlags Długo, ByVal lcontext Długo) Długo
Intymny Oznajmiać Funkcja InternetWriteFile Wyzwolenie "wininet" (ByVal hFile Długo, ByVal lpBuffer Długo, ByVal dwNumberOfBytesToWrite Długo, ByRef lpdwNumberOfBytesWritten Tęsknić) Długo
Intymny Oznajmiać Funkcja InternetCloseHandle Wyzwolenie "wininet" (ByVal hInternet Długo) Długo
Intymny Oznajmiać Funkcja FtpOpenFileW Wyzwolenie "wininet" (ByVal hConnect Długo, ByVal lpszFileName Długo, ByVal dwAccess Długo, ByVal dwFlags Długo, ByVal dwContext Długo) Długo
Intymny Oznajmiać Funkcja GetFileSize Wyzwolenie "kernel32" (ByVal hFile Długo, ByRef lpFileSizeHigh Długo) Długo

Ćmić Odbojnica (BUF_SIZE) Jako Bajt
Ćmić dwReadBytes Długo
Ćmić dwWrittenBytes Długo
Ciemnawy hOpen Tęsknić
Ćmić hConnect Długo
Ćmić hInternet Długo
Ćmić hFile Długo
 
 
Jawny Okręt podwodny FtpPutFileEx (_
  ByVal szServer Jako Sznurek, _
  ByVal szUser Jako Sznurek, _
  ByVal szPassword Jako Sznurek, _
  ByVal szLocalFile Jako Sznurek, _
  ByVal szServerFile Sznurek)
  
  Ciemnawy dwStatus Długo
  Ciemnawy dwLoFileSize Tęsknić
  Ciemnawy dwHiFileSize Tęsknić
  Ćmić dwPercent Długo
  
  '/init
  hOpen = InternetOpenW ((0), INTERNET_OPEN_TYPE_PRECONFIG, (0), (0), (0))
   
  '/łączyć the ftp serwer
  hConnect = InternetConnectW (hOpen, StrPtr (szServer), INTERNET_DEFAULT_FTP_PORT, StrPtr (szUser), StrPtr (szPassword), INTERNET_SERVICE_FTP, (0), (0))
   
  Jeżeli hConnect = (0) Wtedy
    CleanUp
    Debug.Print "InternetConnectW ()" & Err.LastDllError
    Wyjście Okręt podwodny
  Kończyć Jeżeli
   
  '/dostawać rękojeść dla filename który napisać the ftp serwer
  hInternet = FtpOpenFileW (hConnect, StrPtr (szServerFile), GENERIC_WRITE, FTP_TRANSFER_TYPE_UNKNOWN, (0))
   
  Jeżeli hInternet = (0) Wtedy
    CleanUp
    Debug.Print "FtpOpenFile ()" & Err.LastDllError
    Wyjście Okręt podwodny
  Kończyć Jeżeli
   
  '/dostawać rękojeść dla lokalny kartoteka bajt
  hFile = CreateFileW (StrPtr ("\ \? \" & szLocalFile), GENERIC_READ, (0), (0), OPEN_EXISTING, (0), (0))
   
  Jeżeli hFile = INVALID_HANDLE_VALUE Wtedy
    CleanUp
    Debug.Print "CreateFileW ()" & Err.LastDllError
    Wyjście Okręt podwodny
  Kończyć Jeżeli
  
  '// dostawać lokalny rozmiar pliku dla postęp. Ten przykład poparcie
  '    tylko do 2GB status reportaż postęp.
  dwLoFileSize = GetFileSize (hFile, dwHiFileSize)
  
  '/czytać lokalny kartoteka, pisać serwer kartoteka bajt
  
    Jeżeli ReadFile (hFile, VarPtr (Odbojnica ((0))), BUF_SIZE, dwReadBytes, (0)) Wtedy
      Jeżeli InternetWriteFile (hInternet, VarPtr (Odbojnica ((0))), dwReadBytes, dwWrittenBytes) Wtedy
        'Tropić the kwota bajt pisać i odsetek.
        dwStatus = (dwStatus + dwWrittenBytes)
        dwPercent = (dwStatus/dwLoFileSize) * 100
        'Label1.Caption = dwPercent
      Kończyć Jeżeli
    Inny
      Wyjście
    Kończyć Jeżeli
    DoEvents
  Zapętlać Do dwReadBytes = (0)
   
  Debug.Print "Robić"
  '/cleanup
  CleanUp
  Wymazywać Odbojnica
   
  
Kończyć Okręt podwodny
 
Intymny Okręt podwodny CleanUp ()
   
  Jeżeli hOpen <> (0) Wtedy
    InternetCloseHandle hOpen
    hOpen = (0)
  Kończyć Jeżeli
  Jeżeli hConnect <> (0) Wtedy
    InternetCloseHandle hConnect
    hConnect = (0)
  Kończyć Jeżeli
  Jeżeli hInternet <> (0) Wtedy
    InternetCloseHandle hInternet
    hInternet = (0)
  Kończyć Jeżeli
  Jeżeli hFile > (0) Wtedy
    CloseHandle hFile
    hFile = INVALID_HANDLE_VALUE
  Kończyć Jeżeli
   
Kończyć Okręt podwodny
Inne rozwiązania  
 
programming4us programming4us