comme provenant d'un monde * nix Je suis très confus avec le comportement de Windows et probablement son système de sécurité. J'essaie simplement d'exécuter un programme externe dans mon application. J'ai trouvé la fonction WinAPI ShellExecute qui fonctionne comme prévu sauf lors du lancement de certains programmes placés dans le sous-répertoire% windir% \ System32.Pourquoi ShellExecute ne trouve pas de fichier?
exécution de ping.exe succède
ShellExecute(NULL, "open", "c:\\Windows\\System32\\ping.exe', NULL, NULL, SW_SHOW)); // ^^^ OK, retcode == 42
exécution de java.exe ne
ShellExecute(NULL, "open", "c:\\Windows\\System32\\java.exe', NULL, NULL, SW_SHOW)); // ^^^ ERROR_FILE_NOT_FOUND, retcode == 2
Il est très étrange parce que java.exe existe dans System32 , possède des autorisations de lecture/exécution pour le groupe Utilisateurs et peut être appelée à partir de cmd.
C:\>dir /q c:\Windows\System32\java.exe
Volume in drive C has no label.
Volume Serial Number is 56E3-0868
Directory of c:\Windows\System32
11.01.2012 23:40 172 320 NT AUTHORITY\SYSTEM java.exe
1 File(s) 172 320 bytes
0 Dir(s) 226 127 564 800 bytes free
C:\>cacls c:\Windows\System32\java.exe
c:\Windows\System32\java.exe NT AUTHORITY\SYSTEM:F
BUILTIN\Administrators:F
BUILTIN\Users:R
Que manque-t-il ici?
OS est l'édition Windows 7 Édition familiale.
Mise à jour: Si je copie c: \ Windows \ Sytem32 \ calc.exe à c: \ Windows \ Sytem32 \ calc2.exe, ShellExecute peut fonctionner calc.exe d'origine, mais échoue avec calc2.exe bien que les fichiers sont identique !! La seule différence réside dans les autorisations supplémentaires pour le groupe TrustedInstaller, que calc2.exe et java.exe manquent. Une coïncidence ?
Peut-être une question de dépendances? Peut-être que Java dépend d'une DLL qui n'est pas dans le chemin de recherche? – ugoren
Non, java.exe n'est même pas lancé. C'est la valeur de retour ShellExecute de 2 qui signale que l'exécutable n'a pas été trouvé. –
Que se passe-t-il lorsque vous lancez c: \ Windows \ System32 \ java.exe' à partir de la ligne de commande (en utilisant le même utilisateur/environnement que 'ShellExecute')? – NPE