Cuestión : Usar wininet.dll con código del vba dentro de la macro de Excel 2003 en el servidor R2 de las ventanas 2008. El ftp cuelga

Estamos utilizando el interfaz de programación de uso del Internet de Windows (WinINet) (wininet.dll) con el código siguiente de VBA en Microsoft Excel 2003 que funciona en el servidor terminal R2 del servidor 2008 de Windows.  Cuelga por 20-45 segundos después de ejecutar la línea blnRc = FtpPutFile (lngINetConn, OutFile1, txt, 1, 0) pero todavía termina el ftp puesto.  En nuestro Windows Xp /2003 trabaja a máquina el ftp puesto los funcionamientos instantáneamente y no hace lngINet dévil del
del
de hang.
como el lngINet =
de Long
de InternetOpen (“ServerName”, 1, el vbNullString, el vbNullString, 0) amortigua el lngINetConn como
del lngINetConn de Long
= del
de InternetConnect (lngINet, servidor, 0, usuario, pwd, 1, 0, 0) amortigua el blnRc como blnRc del
del blnRc de Boolean
= del
de FtpPutFile (lngINetConn, OutFile1, txt, 1, 0) = blnRc de
de FtpDeleteFile (lngINetConn, registro del ) = el
de FtpDeleteFile (lngINetConn, rechazos del ) el blnRc = el lngINet
del lngINetConn
InternetCloseHandle del

InternetCloseHandle del
de FtpDeleteFile (el lngINetConn, razona) si hace una diferencia pero el servidor él es no sure FTPing a es un rel= " nofollow " del” _blank” del target= de " http://msdn.microsoft.com/en-us/library/aa383630(v=VS.85).aspx” del href= del
de Sun Solaris 10 box.
> el en-us/library/aa383630 (v=VS.85) .aspx
de http://msdn.microsoft.com/ class= del

Respuesta : Usar wininet.dll con código del vba dentro de la macro de Excel 2003 en el servidor R2 de las ventanas 2008. El ftp cuelga

Aquí usted tiene una versión extendida de FtpPutFile… (FtpPutFileEx) método de encargo que puede calcular la información del octeto para el progreso tan bien como mensajes de la bomba al UI.

Uso:
 FtpPutFileEx “ftp.server.com”, “usuario”, “paso”, “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:
Opción explícita
'egl1044
Const privado BUF_SIZE = almacenador intermediario del defecto 4096 '4KB para el ftp
 
Const privado INVALID_HANDLE_VALUE = (- 1)
Const privado OPEN_EXISTING = &H3&
Const privado GENERIC_READ = &H80000000
Const privado GENERIC_WRITE = &H40000000
Const privado INTERNET_OPEN_TYPE_PRECONFIG = 0
Const privado INTERNET_SERVICE_FTP = 1
Const privado INTERNET_DEFAULT_FTP_PORT = 21
Const privado FTP_TRANSFER_TYPE_UNKNOWN = 0
 
Privado declarar la liberación “kernel32” de CreateFileW de la función (lpFileName de ByVal como dwDesiredAccess de largo, de ByVal como dwShareMode de largo, de ByVal como lpSecurityAttributes de largo, de ByVal como dwCreationDisposition de largo, de ByVal como dwFlagsAndAttributes como de largo, ByVal de largo, de ByVal hTemplateFile como de largo) como de largo
Privado declarar la liberación “kernel32” de ReadFile de la función (ByVal hFile como de largo, lpBuffer de ByVal como de largo, nNumberOfBytesToRead de ByVal como de largo, lpNumberOfBytesRead de ByRef como de largo, ByVal lpOverlapped como de largo) como de largo
Privado declarar la liberación “kernel32” de CloseHandle de la función (hObject de ByVal como de largo) como de largo
Privado declarar la liberación “wininet” de InternetOpenW de la función (ByVal lpszAgent como dwAccessType de largo, de ByVal como lpszProxyName de largo, de ByVal como lpszProxyBypass de largo, de ByVal como dwFlags de largo, de ByVal como de largo) como de largo
Privado declarar la liberación “wininet” de InternetConnectW de la función (hInternetSession de ByVal como sServerName de largo, de ByVal como nServerPort de largo, de ByVal como sUsername de largo, de ByVal como sPassword de largo, de ByVal como lService de largo, de ByVal como lFlags de largo, de ByVal como lcontext de largo, de ByVal como de largo) como de largo
Privado declarar la liberación “wininet” de InternetWriteFile de la función (ByVal hFile como de largo, lpBuffer de ByVal como de largo, dwNumberOfBytesToWrite de ByVal como de largo, ByRef lpdwNumberOfBytesWritten como de largo) como de largo
Privado declarar la liberación “wininet” de InternetCloseHandle de la función (hInternet de ByVal como de largo) como de largo
Privado declarar la liberación “wininet” de FtpOpenFileW de la función (hConnect de ByVal como lpszFileName de largo, de ByVal como dwAccess de largo, de ByVal como dwFlags de largo, de ByVal como dwContext de largo, de ByVal como de largo) como de largo
Privado declarar la liberación “kernel32” de GetFileSize de la función (ByVal hFile como lpFileSizeHigh de largo, de ByRef como de largo) como de largo

Amortiguar el almacenador intermediario (BUF_SIZE) como octeto
Amortiguar los dwReadBytes como de largo
Amortiguar los dwWrittenBytes como de largo
Dévil hOpen como de largo
Amortiguar el hConnect como de largo
Amortiguar el hInternet como de largo
Amortiguar hFile como de largo
 
 
FtpPutFileEx secundario público (_
  szServer de ByVal como secuencia, _
  szUser de ByVal como secuencia, _
  szPassword de ByVal como secuencia, _
  ByVal szLocalFile como secuencia, _
  ByVal szServerFile como secuencia)
  
  dwStatus dévil como de largo
  Dévil dwLoFileSize como de largo
  Dévil dwHiFileSize como de largo
  Amortiguar dwPercent como de largo
  
  '/init
  hOpen = InternetOpenW (0, INTERNET_OPEN_TYPE_PRECONFIG, 0, 0, 0)
   
  '/conectar con el ftp server
  hConnect = InternetConnectW (hOpen, StrPtr (szServer), INTERNET_DEFAULT_FTP_PORT, StrPtr (szUser), StrPtr (szPassword), INTERNET_SERVICE_FTP, 0, 0)
   
  Si hConnect = 0 entonces
    Limpieza
    Debug.Print “InternetConnectW ()” y Err.LastDllError
    Salir el submarino
  Terminar si
   
  '/conseguir la manija para el nombre de fichero que será escrito al ftp server
  hInternet = FtpOpenFileW (hConnect, StrPtr (szServerFile), GENERIC_WRITE, FTP_TRANSFER_TYPE_UNKNOWN, 0)
   
  Si hInternet = 0 entonces
    Limpieza
    Debug.Print “FtpOpenFile ()” y Err.LastDllError
    Salir el submarino
  Terminar si
   
  '/conseguir la manija para el archivo local para leer octetos
  ¿hFile = CreateFileW (StrPtr (“\ \? \” y szLocalFile), GENERIC_READ, 0, 0, OPEN_EXISTING, 0, 0)
   
  Si es hFile = INVALID_HANDLE_VALUE entonces
    Limpieza
    Debug.Print “CreateFileW ()” y Err.LastDllError
    Salir el submarino
  Terminar si
  
  '// consigue el tamaño del archivo local para el progreso. Ayudas de este ejemplo
  '    solamente hasta 2GB del progreso de la información del estado.
  dwLoFileSize = GetFileSize (hFile, dwHiFileSize)
  
  '/leer el archivo local, escriben octetos del archivo del servidor
  Hacer
    Si ReadFile (hFile, VarPtr (almacenador intermediario (0)), BUF_SIZE, dwReadBytes, 0) entonces
      Si InternetWriteFile (hInternet, VarPtr (almacenador intermediario (0)), dwReadBytes, dwWrittenBytes) entonces
        'Seguir la cantidad de octetos escritos y de porcentaje.
        dwStatus = (dwStatus + dwWrittenBytes)
        dwPercent = (el dwStatus/dwLoFileSize) * 100
        'Label1.Caption = dwPercent
      Terminar si
    
      La salida hace
    Terminar si
    DoEvents
  Colocar hasta dwReadBytes = 0
   
  Debug.Print “hechos”
  '/limpieza
  Limpieza
  Almacenador intermediario del Erase
   
  
Submarino del extremo
 
Limpieza secundaria privada ()
   
  Si entonces <> hOpen 0
    InternetCloseHandle hOpen
    hOpen = 0
  Terminar si
  Si hConnect <> 0 entonces
    hConnect de InternetCloseHandle
    hConnect = 0
  Terminar si
  Si hInternet <> 0 entonces
    hInternet de InternetCloseHandle
    hInternet = 0
  Terminar si
  Si > 0 hFile entonces
    CloseHandle hFile
    hFile = INVALID_HANDLE_VALUE
  Terminar si
   
Terminar el submarino
Otras soluciones  
 
programming4us programming4us