Question : Using wininet.dll avec le code de vba dans le macro d'Excel 2003 sur le serveur R2 des fenêtres 2008. Le ftp accroche

Nous employons la l'interface de programmation API pour commandes Tempus-link d'Internet de Windows (WinINet) (wininet.dll) avec le code suivant de VBA dans Microsoft Excel 2003 fonctionnant sur le serveur R2 terminal du serveur 2008 de Windows.  Il accroche pendant 20-45 secondes après exécution de la ligne blnRc = FtpPutFile (lngINetConn, OutFile1, txt, 1, 0) mais accomplit toujours le ftp mis.  Sur notre Windows Xp /2003 usine le ftp mis des courses instantanément et ne fait pas lngINet du
du
de hang.
faible comme lngINet de Long
=
d'InternetOpen (« ServerName », 1, vbNullString, vbNullString, 0) obscurcissent le lngINetConn en tant que
de lngINetConn de Long
= de
d'InternetConnect (lngINet, serveur, 0, utilisateur, pwd, 1, 0, 0) obscurcissent le blnRc blnRc en tant que le blnRc du
de blnRc de Boolean
= de
de FtpPutFile (lngINetConn, OutFile1, txt, 1, 0) = de FtpDeleteFile (lngINetConn, notation de )
=
de FtpDeleteFile (lngINetConn, rejets de ) le blnRc = le lngINet
du lngINetConn
InternetCloseHandle du

InternetCloseHandle du
de FtpDeleteFile (le lngINetConn, le raisonne) pas sure s'il fait une différence mais le serveur il est FTPing à est un rel= " nofollow " de » _blank » de target= de " http://msdn.microsoft.com/en-us/library/aa383630(v=VS.85).aspx » de href= du
de Sun Solaris 10 box.
> le en-us/library/aa383630 (v=VS.85) .aspx
de http://msdn.microsoft.com/ class= de

Réponse : Using wininet.dll avec le code de vba dans le macro d'Excel 2003 sur le serveur R2 des fenêtres 2008. Le ftp accroche

Voici que vous avez une version prolongée de FtpPutFile… (FtpPutFileEx) méthode faite sur commande qui peut calculer l'information de byte pour le progrès comme des messages de pompe à l'UI.

Utilisation :
 FtpPutFileEx « ftp.server.com », « utilisateur », « passage », « 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 :
Option explicite
'egl1044
Const privé BUF_SIZE = amortisseur du défaut 4096 '4KB pour le ftp
 
Const privé INVALID_HANDLE_VALUE = (- 1)
Const privé OPEN_EXISTING = &H3&
Const privé GENERIC_READ = &H80000000
Const privé GENERIC_WRITE = &H40000000
Const privé INTERNET_OPEN_TYPE_PRECONFIG = 0
Const privé INTERNET_SERVICE_FTP = 1
Const privé INTERNET_DEFAULT_FTP_PORT = 21
Const privé FTP_TRANSFER_TYPE_UNKNOWN = 0
 
Privé déclarer la bibliothèque « kernel32 » de CreateFileW de fonction (lpFileName de ByVal en tant que dwDesiredAccess longtemps, de ByVal en tant que dwShareMode longtemps, de ByVal en tant que lpSecurityAttributes longtemps, de ByVal en tant que dwCreationDisposition longtemps, de ByVal en tant que dwFlagsAndAttributes longtemps, de ByVal en tant que longtemps, ByVal hTemplateFile en tant que longtemps) en tant que longtemps
Privé déclarer la bibliothèque « kernel32 » de ReadFile de fonction (ByVal hFile en tant que longtemps, lpBuffer de ByVal en tant que longtemps, nNumberOfBytesToRead de ByVal en tant que longtemps, lpNumberOfBytesRead de ByRef en tant que longtemps, ByVal lpOverlapped en tant que longtemps) en tant que longtemps
Privé déclarer la bibliothèque « kernel32 » de CloseHandle de fonction (hObject de ByVal en tant que longtemps) en tant que longtemps
Privé déclarer la bibliothèque « wininet » d'InternetOpenW de fonction (ByVal lpszAgent en tant que dwAccessType longtemps, de ByVal en tant que lpszProxyName longtemps, de ByVal en tant que lpszProxyBypass longtemps, de ByVal en tant que dwFlags longtemps, de ByVal en tant que longtemps) en tant que longtemps
Privé déclarer la bibliothèque « wininet » d'InternetConnectW de fonction (hInternetSession de ByVal en tant que sServerName longtemps, de ByVal en tant que nServerPort longtemps, de ByVal en tant que sUsername longtemps, de ByVal en tant que sPassword longtemps, de ByVal en tant que lService longtemps, de ByVal en tant que lFlags longtemps, de ByVal en tant que lcontext longtemps, de ByVal en tant que longtemps) en tant que longtemps
Privé déclarer la bibliothèque « wininet » d'InternetWriteFile de fonction (ByVal hFile en tant que longtemps, lpBuffer de ByVal en tant que longtemps, dwNumberOfBytesToWrite de ByVal en tant que longtemps, ByRef lpdwNumberOfBytesWritten en tant que longtemps) en tant que longtemps
Privé déclarer la bibliothèque « wininet » d'InternetCloseHandle de fonction (hInternet de ByVal en tant que longtemps) en tant que longtemps
Privé déclarer la bibliothèque « wininet » de FtpOpenFileW de fonction (hConnect de ByVal en tant que lpszFileName longtemps, de ByVal en tant que dwAccess longtemps, de ByVal en tant que dwFlags longtemps, de ByVal en tant que dwContext longtemps, de ByVal en tant que longtemps) en tant que longtemps
Privé déclarer la bibliothèque « kernel32 » de GetFileSize de fonction (ByVal hFile en tant que lpFileSizeHigh longtemps, de ByRef en tant que longtemps) en tant que longtemps

Obscurcir l'amortisseur (BUF_SIZE) comme byte
Obscurcir les dwReadBytes en tant que longtemps
Obscurcir les dwWrittenBytes en tant que longtemps
Faible hOpen en tant que longtemps
Obscurcir le hConnect en tant que longtemps
Obscurcir le hInternet en tant que longtemps
Obscurcir hFile en tant que longtemps
 
 
FtpPutFileEx secondaire public (_
  szServer de ByVal comme corde, _
  szUser de ByVal comme corde, _
  szPassword de ByVal comme corde, _
  ByVal szLocalFile comme corde, _
  ByVal szServerFile comme corde)
  
  Faible dwStatus en tant que longtemps
  Faible dwLoFileSize en tant que longtemps
  Faible dwHiFileSize en tant que longtemps
  Obscurcir dwPercent en tant que longtemps
  
  '/init
  hOpen = InternetOpenW (0, INTERNET_OPEN_TYPE_PRECONFIG, 0, 0, 0)
   
  '/relier au ftp server
  hConnect = InternetConnectW (hOpen, StrPtr (szServer), INTERNET_DEFAULT_FTP_PORT, StrPtr (szUser), StrPtr (szPassword), INTERNET_SERVICE_FTP, 0, 0)
   
  Si hConnect = 0 puis
    Nettoyage
    Debug.Print « InternetConnectW () » et Err.LastDllError
    Sortir le sous-marin
  Finir si
   
  '/obtenir la poignée pour le nom de fichier qui sera écrit au ftp server
  hInternet = FtpOpenFileW (hConnect, StrPtr (szServerFile), GENERIC_WRITE, FTP_TRANSFER_TYPE_UNKNOWN, 0)
   
  Si hInternet = 0 puis
    Nettoyage
    Debug.Print « FtpOpenFile () » et Err.LastDllError
    Sortir le sous-marin
  Finir si
   
  '/obtenir la poignée pour le dossier local pour lire des bytes
  hFile = CreateFileW (StrPtr (« \ \ ? \ » et szLocalFile), GENERIC_READ, 0, 0, OPEN_EXISTING, 0, 0)
   
  Si hFile = INVALID_HANDLE_VALUE alors
    Nettoyage
    Debug.Print « CreateFileW () » et Err.LastDllError
    Sortir le sous-marin
  Finir si
  
  '// obtiennent la taille de fichier de fichier locale pour le progrès. Appuis de cet exemple
  '    seulement jusqu'à 2GB de progrès de reportage de statut.
  dwLoFileSize = GetFileSize (hFile, dwHiFileSize)
  
  '/lire le dossier local, écrivent des bytes de dossier de serveur
  Faire
    Si ReadFile (hFile, VarPtr (amortisseur (0)), BUF_SIZE, dwReadBytes, 0) puis
      S'InternetWriteFile (hInternet, VarPtr (amortisseur (0)), dwReadBytes, dwWrittenBytes) puis
        'Dépister la quantité de bytes écrits et de pourcentage.
        dwStatus = (dwStatus + dwWrittenBytes)
        dwPercent = (le dwStatus/dwLoFileSize) * 100
        'Label1.Caption = dwPercent
      Finir si
    Autrement
      La sortie font
    Finir si
    DoEvents
  Faire une boucle jusqu'aux dwReadBytes = 0
   
  Debug.Print « faits »
  '/nettoyage
  Nettoyage
  Amortisseur d'effacement
   
  
Sous-marin d'extrémité
 
Nettoyage secondaire privé ()
   
  Si hOpen <> 0 alors
    InternetCloseHandle hOpen
    hOpen = 0
  Finir si
  Si hConnect <> 0 puis
    hConnect d'InternetCloseHandle
    hConnect = 0
  Finir si
  Si hInternet <> 0 puis
    hInternet d'InternetCloseHandle
    hInternet = 0
  Finir si
  Si > 0 hFile puis
    CloseHandle hFile
    hFile = INVALID_HANDLE_VALUE
  Finir si
   
Finir le sous-marin
Autres solutions  
  •  MS Excel 2007 et pdf - l'exportation vers le pdf prend de longues heures !
  •  Dans le Perl, comment j'ajoute une valeur à la liste, puis le contrôle pour voir si la valeur existent avant d'ajouter une nouvelle valeur
  •  Comment fais j'initialiser de la HP BL460c G6 de san et de la HP XP 240000
  •  Comment fais j'employer une clef de permis de volume sur un ordinateur de HP avec du CD de restauration
  •  Emplacement primaire de deux SCCM dans l'annuaire actif
  •  L'initiateur et la HP D2D de l'iSCSI R2 du serveur 2008 de Windows GERCENT l'issue
  •  Stocker le dossier dans le mysql using connector.net et le champ de goutte
  •  Carte vidéo d'USB - bit 32 sur le matériel travaillant au niveau du bit 64 ?
  •  asp.net que j'essaye de convertir une forme de HTML en forme d'aspx ou ? ce qui jamais. Aide du besoin sur la façon dont à à elle.
  •  Winzip 12 issues de secours du travail ?
  •  
    programming4us programming4us