Commande ftp.exe via CreateProcessAsUser
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)
Citation:
@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é.
Citation:
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é.
Citation:
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é 8O
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:
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:
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 :D
Merci