Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1722 connectés 

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  Exécution à distance, problème de répertoire

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Exécution à distance, problème de répertoire

n°1255465
Fred999
Rabat-joie
Posté le 29-11-2005 à 18:12:41  profilanswer
 

Bonjour tlm,
 
Tout d'abord, désolé pour le titre peu explicite, le problème est amha assez compliqué à résumer en quelques mots.
 
Conditions de départ
1. Un binaire Windows (PowerBuilder), situé sur le répertoire A, lance un script (ps2pdf.bat), également situé dans le répertoire A, afin de générer un fichier PDF dans le répertoire B.
 
Le script ps2pdf.bat est récupéré depuis l'appli Ghostscript : il transforme un fichier PostScript (.ps) en fichier PDF.
 
La commande lancée par l'application est : ps2pdf B:\fichier.ps B:\fichier.pdf B:\
 
Le script ps2pdf appelle deux autres scripts, ps2pdfxx.bat et gssetgs.bat, situés dans le répertoire A.
 
2. Lors de l'exécution du script, on doit créer dans le répertoire B:\ quatre fichiers temporaires :
_.at (généré par le script dans B:\)
_.at2 (généré par le script dans B:\)
gswin32.exe (copie de A:\ vers B:\)
gswin32c.exe (copie de A:\ vers B:\)
 
qui permettent d'obtenir le fichier PDF.
 
3. Le problème rencontré au départ est que les fichiers temporaires _.at et _.at2 sont créés, avec le script d'origine, dans le répertoire A:\ ; or nos utilisateurs ne disposent pas des droits d'écriture dans ce répertoire (de toute manière, cela poserait des problèmes vu le grand nombre d'utilisateurs).
 
Problème
J'ai donc modifié le script pour qu'il fonctionne comme expliqué au point 2.
 
Lorsque j'exécute le script depuis une fenêtre DOS (sous XP), tout fonctionne correctement : les fichiers sont créés au bon endroit et le PDF généré.
 
Par contre, lorsque je l'exécute à partir de l'application, les fichiers _.at et _.at2 ne sont pas créés dans B:\ mais dans A:\ (ce qui rend l'exécution globale impossible depuis les postes clients) et les fichiers gswin32.exe et gswin32c.exe ne sont pas copiés dans B:\.
 
Si quelqu'un avait une idée, ça m'aiderait vraiment beaucoup...
 
Les trois fichiers :
 
ps2pdf.bat (exécution : ps2pdf B:\fichier.ps B:\fichier.pdf B:\)

@echo off
@rem $Id: ps2pdf.bat,v 1.8 2002/02/21 21:49:28 giles Exp $
 
echo -dCompatibilityLevel#1.2 >%3_.at
goto bot
 
:top
echo %1 >>%3_.at
shift
 
:bot
if not %4/==/ goto top
call ps2pdfxx %1 %2 %3


 
ps2pdfxx.bat (exécution, voir ligne précédente : ps2pdfxx B:\fichier.ps B:\fichier.pdf B:\)

@echo off
@rem $Id: ps2pdfxx.bat,v 1.13 2002/11/20 03:01:23 alexcher Exp $
rem Internal batch file for calling pdfwrite driver.
 
rem The files that call this one (ps2pdf*.bat) write the command-line
rem options into _.at, and then pass the last 2 (or fewer) arguments
rem to this file.
 
call gssetgs.bat %3
echo -q -dSAFER -dNOPAUSE -dBATCH -sDEVICE#pdfwrite >%3_.at2
 
if "%OS%"=="Windows_NT" goto nt
 
rem Run ps2pdf on any Microsoft OS.
 
if %1/==/ goto usage
if %2/==/ goto usage
 
rem Watcom C deletes = signs, so use # instead.
rem We have to include the options twice because -I only takes effect if it
rem appears before other options.
 
:run
echo -sOutputFile#%2 >>%3_.at2
cd %3
rem copy /b /y %3_.at2+%3_.at > NUL
echo -c .setpdfwrite -f %1 >>%3_.at2
%3%GSC% @%3_.at @%3_.at2
goto end
 
:usage
echo Usage: ps2pdf [options...] input.[e]ps output.pdf
goto end
 
rem Run ps2pdf on Windows NT.
 
:nt
if not CMDEXTVERSION 1 goto run
if %1/==/ goto ntusage
if %2/==/ goto nooutfile
goto run
 
:ntusage
echo Usage: ps2pdf input.ps [output.pdf]
echo    or: ps2pdf [options...] input.[e]ps output.pdf
goto end
 
:nooutfile
rem We don't know why the circumlocution with _1 is needed....
set _1=%1
set _outf=%_1:.PS=.pdf%
if %_1%==%_outf% goto addsuff
call ps2pdfxx %1 %_outf%
goto postsuff
 
:addsuff
qcall ps2pdfxx %1 %1%.pdf
 
:postsuff
set _1=
set _outf=
 
:end
rem Clean up.
if exist %3_.at erase %3_.at
if exist %3_.at2 erase %3_.at2
if exist %3gswin32.exe erase %3gswin32.exe
if exist %3gswin32c.exe erase %3gswin32c.exe


 
gssetgs.bat (exécution : gssetgs B:\)

@echo off
@rem $Id: gssetgs.bat,v 1.5 2002/02/21 21:49:28 giles Exp $
 
rem Set default values for GS (gs with graphics window) and GSC
rem (console mode gs) if the user hasn't set them.
copy gswin32.exe %1
copy gswin32c.exe %1
if %GS%/==/ set GS=%1gswin32
if %GSC%/==/ set GSC=%1gswin32c

Message cité 1 fois
Message édité par Fred999 le 29-11-2005 à 18:13:44
mood
Publicité
Posté le 29-11-2005 à 18:12:41  profilanswer
 

n°1255477
ObsydianKe​nobi
peloton suicida
Posté le 29-11-2005 à 18:30:12  profilanswer
 

Ca serait bien que tu mettes aussi le script d'origine non modifié


---------------
Long-range goals keep you from being frustrated by short-term failures. RIP VC
n°1255478
ObsydianKe​nobi
peloton suicida
Posté le 29-11-2005 à 18:32:43  profilanswer
 

mais bon t'es sûr que le script récupère les bons paramètres? avec/sans guillemets? t'as essayé avec un ptit prog VB pour voir si ça fait pareil?


---------------
Long-range goals keep you from being frustrated by short-term failures. RIP VC
n°1255492
Fred999
Rabat-joie
Posté le 29-11-2005 à 18:48:08  profilanswer
 

Merci [:draculax]
 
C'est ce que je pourrais me demander, mais alors pourquoi, lorsque je l'exécute depuis l'appli, crée-t-il les fichiers .ps et surtout .pdf au bon endroit ? Et que donc seuls les fichiers _.at et _.at2 ne sont pas où ils devraient être ?
 
Depuis, j'ai supprimé la recopie des binaires, ça ne changeait en fait rien à l'affaire.
 
Je mets les scripts d'origine dans le post suivant.

n°1255499
Fred999
Rabat-joie
Posté le 29-11-2005 à 18:52:53  profilanswer
 

ps2pdf.bat

@echo off
@rem $Id: ps2pdf.bat,v 1.8 2002/02/21 21:49:28 giles Exp $
 
rem Convert PostScript to PDF 1.2 (Acrobat 3-and-later compatible).
rem The default PDF compatibility level may change in the future:
rem use ps2pdf12 or ps2pdf13 if you want a specific level.
 
rem The current default compatibility level is PDF 1.2.
echo -dCompatibilityLevel#1.2 >_.at
goto bot
 
rem Pass arguments through a file to avoid overflowing the command line.
:top
echo %1 >>_.at
shift
:bot
if not %3/==/ goto top
call ps2pdfxx %1 %2


 
ps2pdfxx.bat

@echo off
@rem $Id: ps2pdfxx.bat,v 1.13 2002/11/20 03:01:23 alexcher Exp $
rem Internal batch file for calling pdfwrite driver.
 
rem The files that call this one (ps2pdf*.bat) write the command-line
rem options into _.at, and then pass the last 2 (or fewer) arguments
rem to this file.
 
call gssetgs.bat
echo -q -dSAFER -dNOPAUSE -dBATCH -sDEVICE#pdfwrite >_.at2
 
if "%OS%"=="Windows_NT" goto nt
 
rem Run ps2pdf on any Microsoft OS.
 
if %1/==/ goto usage
if %2/==/ goto usage
 
rem Watcom C deletes = signs, so use # instead.
rem We have to include the options twice because -I only takes effect if it
rem appears before other options.
 
:run
echo -sOutputFile#%2 >>_.at2
copy /b /y _.at2+_.at >NUL
echo -c .setpdfwrite -f %1 >>_.at2
%GSC% @_.at @_.at2
goto end
 
:usage
echo Usage: ps2pdf [options...] input.[e]ps output.pdf
goto end
 
rem Run ps2pdf on Windows NT.
 
:nt
if not CMDEXTVERSION 1 goto run
if %1/==/ goto ntusage
if %2/==/ goto nooutfile
goto run
 
:ntusage
echo Usage: ps2pdf input.ps [output.pdf]
echo    or: ps2pdf [options...] input.[e]ps output.pdf
goto end
 
:nooutfile
rem We don't know why the circumlocution with _1 is needed....
set _1=%1
set _outf=%_1:.PS=.pdf%
if %_1%==%_outf% goto addsuff
call ps2pdfxx %1 %_outf%
goto postsuff
 
:addsuff
call ps2pdfxx %1 %1%.pdf
 
:postsuff
set _1=
set _outf=
 
:end
rem Clean up.
if exist _.at erase _.at
if exist _.at2 erase _.at2


 
gssetgs.bat

@echo off
@rem $Id: gssetgs.bat,v 1.5 2002/02/21 21:49:28 giles Exp $
 
rem Set default values for GS (gs with graphics window) and GSC
rem (console mode gs) if the user hasn't set them.
 
if %GS%/==/ set GS=gswin32
if %GSC%/==/ set GSC=gswin32c

n°1255501
HumanRAGE
Rage d'être un Humain...LIBRE!
Posté le 29-11-2005 à 18:53:28  profilanswer
 

rajoute des  
echo %1 %2 %3  >> chemin accessible en ecriture\debug.txt
 
dans tes scripts, et execute les va l'appli, pour verifier qu'elle passe bien les parametres attendus

Message cité 1 fois
Message édité par HumanRAGE le 29-11-2005 à 18:54:23

---------------
When I give food to the poor, they call me a saint. When I ask why the poor have no food, they call me a communist. Helder Camara | Telling your employees they're "family" is the corporate equivalent of saying "I love you" to a sex worker.
n°1255502
ObsydianKe​nobi
peloton suicida
Posté le 29-11-2005 à 18:54:00  profilanswer
 


 
 
...et dieu sait que je devrais pas hein  :o  :D  
 

Fred999 a écrit :

C'est ce que je pourrais me demander, mais alors pourquoi, lorsque je l'exécute depuis l'appli, crée-t-il les fichiers .ps et surtout .pdf au bon endroit ? Et que donc seuls les fichiers _.at et _.at2 ne sont pas où ils devraient être ?


 
 
ah j'avais pas vu que les PS et PDF étaient au bon endroit [:icon3]
 
je relis les scripts alors


---------------
Long-range goals keep you from being frustrated by short-term failures. RIP VC
n°1255504
ObsydianKe​nobi
peloton suicida
Posté le 29-11-2005 à 18:54:27  profilanswer
 

HumanRAGE a écrit :

rajoute des  
echo %1 %2 %3  > chemin accessible en ecriture\debug.txt
 
dans tes scripts, et execute les va l'appli, pour verifier qu'elle passe bien les parametres attendus


 
 
déjà demandé :o


---------------
Long-range goals keep you from being frustrated by short-term failures. RIP VC
n°1255506
HumanRAGE
Rage d'être un Humain...LIBRE!
Posté le 29-11-2005 à 18:55:56  profilanswer
 

doit y avoir un espace en trop quelque part dans les parametres, qui fait que le shift chie dans la colle :o


---------------
When I give food to the poor, they call me a saint. When I ask why the poor have no food, they call me a communist. Helder Camara | Telling your employees they're "family" is the corporate equivalent of saying "I love you" to a sex worker.
n°1255509
ObsydianKe​nobi
peloton suicida
Posté le 29-11-2005 à 18:58:12  profilanswer
 

:end  
rem Clean up.  
if exist %3_.at erase %3_.at  
if exist %3_.at2 erase %3_.at2  
if exist %3gswin32.exe erase %3gswin32.exe  
if exist %3gswin32c.exe erase %3gswin32c.exe


 
 
 [:sniperlk]


---------------
Long-range goals keep you from being frustrated by short-term failures. RIP VC
mood
Publicité
Posté le 29-11-2005 à 18:58:12  profilanswer
 

n°1255523
HumanRAGE
Rage d'être un Humain...LIBRE!
Posté le 29-11-2005 à 19:11:50  profilanswer
 

Fred999 a écrit :

ps2pdfxx.bat (exécution, voir ligne précédente : ps2pdfxx B:\fichier.ps B:\fichier.pdf B:\)

Citation :

@echo off
...
:run
echo -sOutputFile#%2 >>%3_.at2
cd %3      
rem copy /b /y %3_.at2+%3_.at > NUL
echo -c .setpdfwrite -f %1 >>%3_.at2
%3%GSC% @%3_.at @%3_.at2
goto end




B:\ est il vraiment accessible depuis le repertoire home de l'application (qui est donc le contexte d'execution des scripts ??) ???
 
utilise  
cd /D %3  
pour etre sur (le /D permet de changer de drive en cas d'adresse absolue differente du drive courant)


Message édité par HumanRAGE le 29-11-2005 à 19:12:57

---------------
When I give food to the poor, they call me a saint. When I ask why the poor have no food, they call me a communist. Helder Camara | Telling your employees they're "family" is the corporate equivalent of saying "I love you" to a sex worker.
n°1255539
Fred999
Rabat-joie
Posté le 29-11-2005 à 19:34:58  profilanswer
 

HumanRAGE a écrit :

doit y avoir un espace en trop quelque part dans les parametres, qui fait que le shift chie dans la colle :o


Merci !
 
Bon ça a avancé depuis tout à l'heure... J'vous tiens au courant. Mais effectivement on bosse là-d'ssus en ce moment.

n°1255541
Fred999
Rabat-joie
Posté le 29-11-2005 à 19:35:32  profilanswer
 

B:\ est le répertoire de sauvegarde par défaut des users (récupéré en bdr), ils ont les droits dessus.

n°1255544
HumanRAGE
Rage d'être un Humain...LIBRE!
Posté le 29-11-2005 à 19:42:08  profilanswer
 

Fred999 a écrit :

B:\ est le répertoire de sauvegarde par défaut des users (récupéré en bdr), ils ont les droits dessus.


je ne sais pas quel est le repertoire courant de l'application, mais un "cd" simple, ne peut que se déplacer dans un meme drive
ex:
si l'appli démarre en c:\program files\appli
 
et que ton script essaye de faire un  
cd e:\perso
 
bah ca foire. seul un  
cd /D e:\perso
peut changer de drive en meme temps qu'il change de repertoire.
 
ca peut expliquer la difference entre quand tu lances a la main en console, et quand c'est l'appli qui le fait. a part la maniere dont sont passé les  parametres, seul le repertoire courant change ;)


---------------
When I give food to the poor, they call me a saint. When I ask why the poor have no food, they call me a communist. Helder Camara | Telling your employees they're "family" is the corporate equivalent of saying "I love you" to a sex worker.
n°1255552
Fred999
Rabat-joie
Posté le 29-11-2005 à 20:00:28  profilanswer
 

OK j'vois...
 
Mais euh bon finalement ça semble être résolu, deux jours de lutte là-dessus (sans compter l'avant, ça a pris plus d'une semaine, l'enfer ces PDF).
 
Merci en tk, j'posterai la soluce !


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Shell/Batch

  Exécution à distance, problème de répertoire

 

Sujets relatifs
Problème de bordure en HTMLProblème de Copie (StreamReader)
[CSS] Problème float IE Mac[Resolu] Probleme Register_Globals
Probleme declaration fonctionMacro : ouverture de fichiers dans un répertoire
Problème avec la commande ISDATE[Résolu] Exécution sous unix
[PHP] Empecher l'accès direct à un sous répertoire d'un siteproblème sous mozilla
Plus de sujets relatifs à : Exécution à distance, problème de répertoire


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR