Frage : Using wininet.dll mit vba Code innerhalb Makro des Excel-2003 auf Bediener R2 der Fenster 2008. Ftp hängt

Wir benutzen die Anwendungsprogramm-Schnittstelle des Windows-Internets (WinINet) (wininet.dll) mit dem folgenden VBA Code in Microsoft Excel 2003, das auf Terminalserver R2 des Windows-Server-2008 läuft.  , nach der Durchführung der Linie blnRc = FtpPutFile (lngINetConn, OutFile1, txt, 1, 0) er hängt für 20-45 Sekunden, aber, schließt noch das gesetzte ftp ab.  Auf unserem Windows Xp bearbeitet /2003 das gesetzte ftp Durchläufe blitzschnell maschinell und tut nicht hang.


schwaches lngINet als Long
lngINet = InternetOpen („ServerName“, 1, vbNullString, vbNullString, 0)
verdunkeln lngINetConn als Long
lngINetConn = InternetConnect (lngINet, Bediener, 0, Benutzer, pwd, 1, 0, 0)

verdunkeln blnRc als Boolean
blnRc = FtpPutFile (lngINetConn, OutFile1, txt, 1, 0)

blnRc = FtpDeleteFile (lngINetConn, Maschinenbordbuch)
blnRc = FtpDeleteFile (lngINetConn, Ausschüße)
 blnRc = FtpDeleteFile (lngINetConn, folgert),


InternetCloseHandle lngINetConn
InternetCloseHandle lngINet
nicht sure, wenn es einen Unterschied aber den Bediener es herstellt, ist FTPing zu ist ein Sun Solaris 10 box.


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

Antwort : Using wininet.dll mit vba Code innerhalb Makro des Excel-2003 auf Bediener R2 der Fenster 2008. Ftp hängt

Hier haben Sie eine ausgedehnte Version von FtpPutFile… (FtpPutFileEx) kundenspezifische Methode, die die Byteinformationen für Fortschritt, sowie Pumpenmitteilungen zum UI berechnen kann.

Verbrauch:
 FtpPutFileEx „ftp.server.com“, „Benutzer“, „Durchlauf“, „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:
6:
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:
Wahl ausdrücklich
'egl1044
Privates Const BUF_SIZE = Puffer der Rückstellung 4096 '4KB für ftp
 
Privates Const INVALID_HANDLE_VALUE = (- 1)
Privates Const OPEN_EXISTING = &H3&
Privates Const GENERIC_READ = &H80000000
Privates Const GENERIC_WRITE = &H40000000
Privates Const INTERNET_OPEN_TYPE_PRECONFIG = 0
Privates Const INTERNET_SERVICE_FTP = 1
Privates Const INTERNET_DEFAULT_FTP_PORT = 21
Privates Const FTP_TRANSFER_TYPE_UNKNOWN = 0
 
Privat Funktion CreateFileW Bibliothek „kernel32“ (ByVal lpFileName als lang, ByVal dwDesiredAccess als lang, ByVal dwShareMode als lang, ByVal lpSecurityAttributes als lang, ByVal dwCreationDisposition als lang, ByVal dwFlagsAndAttributes als lang, ByVal hTemplateFile als lang) als lang erklären
Privat Funktion ReadFile Bibliothek „kernel32“ (ByVal, das, ByVal lpBuffer als lang, ByVal nNumberOfBytesToRead als lang, ByRef lpNumberOfBytesRead als lang hFile ist als lang, ByVal lpOverlapped als lang), als lang erklären
Privat Funktion CloseHandle Bibliothek „kernel32“ (ByVal hObject als lang) als lang erklären
Privat Funktion InternetOpenW Bibliothek „wininet“ (ByVal lpszAgent als lang, ByVal dwAccessType als lang, ByVal lpszProxyName als lang, ByVal lpszProxyBypass als lang, ByVal dwFlags als lang) als lang erklären
Privat Funktion InternetConnectW Bibliothek „wininet“ (ByVal hInternetSession als lang, ByVal sServerName als lang, ByVal nServerPort als lang, ByVal sUsername als lang, ByVal sPassword als lang, ByVal lService als lang, ByVal lFlags als lang, ByVal lcontext als lang) als lang erklären
Privat Funktion InternetWriteFile Bibliothek „wininet“ (ByVal, das, ByVal lpBuffer als lang, ByVal dwNumberOfBytesToWrite als lang hFile ist als lang, ByRef lpdwNumberOfBytesWritten als lang), als lang erklären
Privat Funktion InternetCloseHandle Bibliothek „wininet“ (ByVal hInternet als lang) als lang erklären
Privat Funktion FtpOpenFileW Bibliothek „wininet“ (ByVal hConnect als lang, ByVal lpszFileName als lang, ByVal dwAccess als lang, ByVal dwFlags als lang, ByVal dwContext als lang) als lang erklären
Privat Funktion GetFileSize Bibliothek „kernel32“ (ByVal hFile als lang, ByRef lpFileSizeHigh als lang) als lang erklären

Puffer (BUF_SIZE) als Byte verdunkeln
dwReadBytes als lang verdunkeln
dwWrittenBytes als lang verdunkeln
Schwach als lang hOpen
hConnect als lang verdunkeln
hInternet als lang verdunkeln
hFile als lang verdunkeln
 
 
Allgemeines VorFtpPutFileEx (_
  ByVal szServer als Schnur, _
  ByVal szUser als Schnur, _
  ByVal szPassword als Schnur, _
  ByVal szLocalFile als Schnur, _
  ByVal szServerFile als Schnur)
  
  Schwaches dwStatus als lang
  Schwach als lang dwLoFileSize
  Schwach als lang dwHiFileSize
  dwPercent als lang verdunkeln
  
  '/init
  hOpen = InternetOpenW (0, INTERNET_OPEN_TYPE_PRECONFIG, 0, 0, 0)
   
  '/an das ftp server anschließen
  hConnect = InternetConnectW (, StrPtr (szServer), INTERNET_DEFAULT_FTP_PORT, StrPtr (szUser), StrPtr (szPassword), INTERNET_SERVICE_FTP, 0, 0) hOpen
   
  Wenn hConnect = 0 dann
    Reinigung
    Debug.Print „InternetConnectW ()“ u. Err.LastDllError
    Unterseeboot herausnehmen
  Beenden wenn
   
  '/Handgriff für Dateinamen erhalten, der zum ftp server geschrieben
  hInternet = FtpOpenFileW (hConnect, StrPtr (szServerFile), GENERIC_WRITE, FTP_TRANSFER_TYPE_UNKNOWN, 0)
   
  Wenn hInternet = 0 dann
    Reinigung
    Debug.Print „FtpOpenFile ()“ u. Err.LastDllError
    Unterseeboot herausnehmen
  Beenden wenn
   
  '/Handgriff für lokale Akte erhalten, um Bytes zu lesen
  hFile = CreateFileW (StrPtr („\ \? \“ u. szLocalFile), GENERIC_READ, 0, 0, OPEN_EXISTING, 0, 0)
   
  Wenn hFile = INVALID_HANDLE_VALUE dann
    Reinigung
    Debug.Print „CreateFileW ()“ u. Err.LastDllError
    Unterseeboot herausnehmen
  Beenden wenn
  
  '// erhalten lokale Dateigröße für Fortschritt. Unterstützungen dieses Beispiels
  '    nur bis zu 2GB des Statusberichtsfortschritts.
  dwLoFileSize = GetFileSize (hFile, dwHiFileSize)
  
  '/lokale Akte lesen, schreiben Bedieneraktenbytes
  Tun
    Wenn ReadFile (hFile, VarPtr (Puffer (0)), BUF_SIZE, dwReadBytes, 0) dann
      Wenn InternetWriteFile (hInternet, VarPtr (Puffer (0)), dwReadBytes, dwWrittenBytes) dann
        'Die Menge der Bytes geschrieben und des Prozentsatzes aufspüren.
        dwStatus = (dwStatus + dwWrittenBytes)
        dwPercent = (dwStatus/dwLoFileSize) * 100
        'Label1.Caption = dwPercent
      Beenden wenn
    Sonst
      Ausgang tun
    Beenden wenn
    DoEvents
  Bis dwReadBytes schlingen = 0
   
  Debug.Print „getan“
  '/Reinigung
  Reinigung
  Löschen-Puffer
   
  
Enden-Unterseeboot
 
Private Vorreinigung ()
   
  Wenn 0 <> dann hOpen
    InternetCloseHandle hOpen
    = 0 hOpen
  Beenden wenn
  Wenn hConnect <> 0 dann
    InternetCloseHandle hConnect
    hConnect = 0
  Beenden wenn
  Wenn hInternet <> 0 dann
    InternetCloseHandle hInternet
    hInternet = 0
  Beenden wenn
  Wenn hFile > 0 dann
    CloseHandle hFile
    hFile = INVALID_HANDLE_VALUE
  Beenden wenn
   
Unterseeboot beenden
Weitere Lösungen  
 
programming4us programming4us