Bonjour,

J'ai un comportement assez bizarre avec la commande ftp.exe et j'aimerais comprendre pourquoi.

J'ai le script suivant que je vais appelé test_ftp.bat:
(dans le fichier ftp_cmd.lst il y a juste une ouverture de session)
@echo off
ftp.exe -v -n -i -s:C:\scripts\ftp_cmd.lst
exit 0
Lorsque je lance le .bat depuis une fenêtre DOS le comporte est normal: avec l'option '-v' le mode verbose est désactivé.
C:\scripts\>test_ftp.bat
ftp> open serveur1.com
ftp> user toto xxx
ftp> quit
Lorsque je modifie le .bat et que j'enlève l'option '-v', la encore le comportement et normal: le mode verbose est activé.
C:\scripts\>test_ftp.bat
ftp> open serveur1.com
Connecté à serveur1.com.
220 (vsFTPd 1.2.1)
ftp> user toto xxx
331 Please specify the password.
230 Login successful.
ftp> quit
221 Goodbye.
Mon problème c'est que lorsque je lance ce même .bat via un CreateProcessAsUser, le comportement est inversé
Avec l'option '-v' le mode verbose est activé et vice versa.

Mon programme est lancé via un service.
Voici un extrait du code:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
 
 
bInheritHandles = TRUE;
memset(&si, 0, sizeof(STARTUPINFO));
si.cb = sizeof(STARTUPINFO);
 
saLogStd = malloc(sizeof(SECURITY_ATTRIBUTES));
saLogStd->nLength = sizeof(SECURITY_ATTRIBUTES);
saLogStd->lpSecurityDescriptor = NULL;
saLogStd->bInheritHandle = TRUE;
 
hdlLogStd = CreateFile(
					"C:\\scripts\\test_std.log",
					GENERIC_WRITE,
					FILE_SHARE_READ|FILE_SHARE_WRITE,
					saLogStd, 
					CREATE_ALWAYS,
					FILE_ATTRIBUTE_NORMAL,
					NULL);
 
hdlLogErr = CreateFile(
					"C:\\scripts\\test_err.log",
					GENERIC_WRITE,
					FILE_SHARE_READ|FILE_SHARE_WRITE,
					saLogStd, 
					CREATE_ALWAYS,
					FILE_ATTRIBUTE_NORMAL,
					NULL);
 
si.hStdOutput = hdlLogStd;
si.hStdError  = hdlLogErr;
si.hStdInput  = GetStdHandle(STD_INPUT_HANDLE);
si.dwFlags = STARTF_USESTDHANDLES
 
CreateProcessAsUser( *htok, "C:\\scripts\\test_ftp.bat", "C:\\scripts\\test_ftp.bat", 0, 0, bInheritHandles,
				CREATE_UNICODE_ENVIRONMENT | NORMAL_PRIORITY_CLASS | CREATE_NEW_CONSOLE,
				pEnvBlock, 0, &si, &pi );
J'ai fait pas mal de tests mais je n'arrive pas à corriger le problème. Je suis arrivé à le faire fonctionner en faisant les redirections directement dans la ligne de commande, mais bon c'est le code ci-dessus que je voudrais faire fonctionner.
Voici le code qui fonctionne:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
 
memset(&si, 0, sizeof(STARTUPINFO));
si.cb = sizeof(STARTUPINFO);
 
 
CreateProcessAsUser( *htok, "C:\\scripts\\test_ftp.bat", "C:\\scripts\\test_ftp.bat >C:\\scripts\\test_std.log 2>C:\\scripts\\test_err.log", 0, 0, 0,
				CREATE_UNICODE_ENVIRONMENT | NORMAL_PRIORITY_CLASS | CREATE_NEW_CONSOLE,
				pEnvBlock, 0, &si, &pi );
Si quelqu'un a une idée pour faire fonctionner le code qui utilise les handles je suis preneur
Merci