Ce qui devrait COMSPEC et le CHEMIN d'accès de l'environnement des variables de localiser la commande-interprète, à l'aide de system()?
Sont les OS (XP) les variables d'environnement les mêmes que ceux utilisés dans un processus en cours d'exécution à partir de visual studio .NET C++?
Il semble que l'interpréteur de commande n'est pas trouvée:
Lors de l'utilisation de la valeur NULL comme la commande, system() renvoie 0 et avec la commande - ENOENT Command interpreter cannot be found
.
Dans windows (Système->Variables d'Environnement), COMSPEC contient le chemin d'accès à cmd.exe
CHEMIN d'accès ne fonctionne pas.
Ce qui devrait CHEMIN?
Autre que cela, vous ne savez pas pourquoi il ne peut pas trouver l'interprète.
Toutes les suggestions sont les bienvenues. Merci.
if( system("tail -500 log.txt") == -1)
{
//Error calling tail.exe on log
//errno is a system macro that expands int returning
//the last error. strerror() converts the error to it's
//corresponding error message.
printf("Error calling tail.exe with system(): %s",strerror( errno ));
}
EDIT1
Entrer dans le système() argv[0] = _tgetenv(_T("COMSPEC"));
retourne un pointeur incorrect. Ce qui est un exécutable cgi, la COMPSEC n'est pas correctement configuré ou héritées de l'OS.
Je vais maintenant définir COMSPEC avant le processus de démarrage et d'utiliser la fonction CreateProcess() comme dans exemple 2
Cependant, le processus de création encore de retour 0? Se rapprocher. Voir tous les problèmes avec cela? Merci.
if (! SetEnvironmentVariable("COMSPEC", "C:\\WINDOWS\\system32\\cmd.exe") )
{
printf("SetEnvironmentVariable failed (%d)\n", GetLastError());
}
//r = system("dir c:\\");
r = CreateProcess("dir.exe", NULL, NULL, NULL, TRUE, NULL,
NULL, //inherit parent's environment
NULL, &si, &pi);
EDIT 2
Lesetenvironmentvariable() ne fonctionne pas. Cependant, putenv n'.
_putenv( "COMSPEC=C:\\WINDOWS\\system32\\cmd.exe" ); //C4996
Pas sûr de ce que la différence est...?
Maintenant que cette env var est définie, toute demande sur le cgi application à partir du navigateur donne la possibilité d'enregistrer la cgi.exe au lieu de l'exécuter.. ne sais Pas pourquoi cela a changé sur cette base env var?
Vous devez vous connecter pour publier un commentaire.
Les variables d'environnement sont hérités lors de l'exécution d'un processus, y compris
system(...)
appel. Sauf si il y a quelque chose de bizarre se passe, et est généralement %windir%\system32\cmd.exe devrait faire l'affaire, il doit développer la variable d'environnement, sauf si vous pouvez utiliser l'API pour obtenir le répertoire windows 'GetWindowsDirectory'. Voir ici pour un exemple de la MSDN.Edit: IIRC, COMSPEC variable d'environnement, si elle se fait sur la ligne de commande
Vous avez un mauvais pointeur, car il n'est probablement pas mis en place, au-dessus de la commande echo doit prouver que, si vous n'obtenez pas de résultat, il n'est pas défini, cliquez à droite sur "Mon Ordinateur", clic gauche sur "Propriétés", une boîte de dialogue de l'onglet d'affichage des pages, cliquez sur "Avancé", cherchez "Variables d'Environnement'...voir les deux captures d'écran ici...
Aussi je tiens à souligner que vous définissez la variable d'environnement temporairement, donc il ne va pas voir le "COMSPEC'....il n'est pas permanent, la seule façon permanente à faire est de suivre les captures d'écran...
J'essaye de faire les captures d'écran en place....
le texte d'alt http://img706.imageshack.us/img706/9434/envvars.png
le texte d'alt http://img638.imageshack.us/img638/5743/comspec.png
Edit#2:
Juste pour souligner cela, lorsque vous définissez la variable d'Environnement ici, c'est temporaire - pas permanent!
Lors de l'utilisation de l'appel
CreateProcess
, il est voué à l'échec, regarde le commentaire "hériter d'un parent de l'environnement", ne peut se produire que l'environnement a été mis en place temporairement. Avez-vous testé le simple écho de commande ici. Quelque chose est mal pourquoi le COMSPEC variable n'est pas définie..après la mise en permanence, vous devez redémarrer l'ordinateur pour que cela fonctionne. Ensuite, la commande echo ci-dessus doit afficher la valeur de cette variable d'environnement, et à son tour, cettedoit retourner un bon pointer...by de la sorte, je pense que cela devrait être
strdup
'd...Edit#3: Oups, j'ai remarqué quand j'ai eu "&pi' utilisé, il est venu comme une pi symbole de la place!...bah, c'est modifié maintenant...j'ai également modifié cette 'argv' code ici:
Espère que cette aide,
Meilleures salutations,
Tom.
Début + Panneau de configuration, Système, Avancé, variables d'Environnement. Sélectionner le Chemin d'accès dans la section variables Système, Modifier. À tout le moins, cela devrait ressembler à ceci:
Poser plus de questions à ce sujet à l'superuser.com