takidoso
Erfahrenes Mitglied
Hallo und Halli,
eigentlich dachte ich das Problem nicht zu haben, doch langsam bin ich am Verzeifeln
Folgende Szene:
Eine Java-Appliation soll CMD-Skripte aufrufen können, die mittels Konfiguration ihr bekanntgegben werden.
Normalerweise klappte dass auch doch nun stelle ich fest dass es offenbar hängen bleibt in folgenden Fällen
Wenn REM (ein kommentar eingestellt ist)
hat das Sciptfile folgenden Inhalt
wobei die Paramter mittels Konfiguration gefüllt werden, klappt es prima!
ist der code aber so etwas:
wird das script nicht ausgeführt, obgleich es in einem Komandozeilenfenster problemlos läuft.
in folgendem Fall wo ich nun extra schon die Kommentare rausgenommen hatte
und das ganze dann auch bei der Konfiguration folgendermaßen aufgerufen wird:
bleibt er bei der Schlüsselgenerierung offenbar stecken und verharrt, obwohl wiederum innerhalb eines Kommandozeilenfensters es problemlos funktioniert.
Hat da jemand zufällig eine Idee woran es liegen könnte bzw. wie man weiteres überprüfen könnte?
Der Java-Code, der schließlich den Kram aufruft sieht so aus:
wobei hier eigentlich nur {//call application by OS ...} interessant ist.
Für weiterfürhende Tips bin ich glücklich und dankbar
Takidoso
eigentlich dachte ich das Problem nicht zu haben, doch langsam bin ich am Verzeifeln
Folgende Szene:
Eine Java-Appliation soll CMD-Skripte aufrufen können, die mittels Konfiguration ihr bekanntgegben werden.
Normalerweise klappte dass auch doch nun stelle ich fest dass es offenbar hängen bleibt in folgenden Fällen
Wenn REM (ein kommentar eingestellt ist)
hat das Sciptfile folgenden Inhalt
Code:
echo on
copy %1 %2
copy %1 %3
ist der code aber so etwas:
Code:
REM ******************************
REM bla bla
REM ******************************
echo on
copy %1 %2
copy %1 %3
in folgendem Fall wo ich nun extra schon die Kommentare rausgenommen hatte
Code:
echo on
copy %1 %2
SET KEYTOOLX=C:\Programme\Java\jdk1.5.0_14\bin\keytool.exe
%KEYTOOLX% -genkey -keyalg RSA -keysize 2048 -alias %4 -keypass MyPrivateKeyPassword -keystore %3 -storepass MyKeyStorePassword -validity 365 -dname "CN=FileDemon,OU=IT Infrastructure,O=Equens AG,L=Frankfurt,ST=Hessen,C=de"
%KEYTOOLX% -selfcert -alias %4 -sigalg SHA1withRSA -keypass MyPrivateKeyPassword -keystore %3 -storepass MyKeyStorePassword -validity 365
%KEYTOOLX% -export -alias %4 -file %5 -keystore %3 -storepass MyKeyStorePassword
copy %5 %6
Code:
cmd /c scripts\windows\takegencerti.cmd from_\x.AGRSPO001F.CERTI.0300.20090522161500.00001 interim\tmp.certi_5503.der interim\tmp.FDKeyStoreTest.jks fdkey interim\tmp.MyCertificate.der.4u interim\tmp.MyCertificate.der.4me
Hat da jemand zufällig eine Idee woran es liegen könnte bzw. wie man weiteres überprüfen könnte?
Der Java-Code, der schließlich den Kram aufruft sieht so aus:
Java:
/**
* starts an application either by OS-Call or by an java class included in class path
*
* @param iFile
* @param outFileNameDateMap
* @param commandPatStr
* @param className4Call
* @param props4Call
* @return Object[2] while [0] (String) originalFileName that is IFile.getName() without prefix
* [1] (String[]) replaceTokens (Tokens that are used in the command or appl call that were replaced)
* @throws Exception
* @see getTokensToReplace(String)
* @see getTokensToReplace(Properties)
*/
public Object[] startApplication(File iFile,
Map<String,List<OutputFileInfos>> outFileNameDateMap,
Map<String,String> otherStringMap,
String commandPatStr,
String className4Call,
Properties props4Call) throws Exception
{
String[] replaceTokens;
String originalFileName = iFile.getName();
if (originalFileName.substring(0,m_config.getInputFileNameReservedPrefix().length()).equals(m_config.getInputFileNameReservedPrefix()))
{
originalFileName = originalFileName.substring(m_config.getInputFileNameReservedPrefix().length()); // get rid of prefix
}
if (commandPatStr!=null && commandPatStr.length() > 0)
{//call application by OS
replaceTokens = getTokensToReplace(commandPatStr);
subsituteOtherStrings(originalFileName, replaceTokens, otherStringMap);
generateTmpOutputFileNames(originalFileName, replaceTokens, outFileNameDateMap);
String applCall = generateApplCall(commandPatStr, replaceTokens, iFile.getName(), outFileNameDateMap, otherStringMap);
//**************************************
System.out.println(applCall);
System.out.println("File:"+iFile.getAbsolutePath()+"\n exists:"+iFile.exists());
//**************************************
String [] toks = applCall.split(" ");
for (String tok :toks)
{
System.out.println("'"+tok+"'");
}
ProcessBuilder pb = new ProcessBuilder(toks);
Process p = pb.start();
if (p.waitFor()!=0)
{
throw new RuntimeException("OS-call '"+applCall+"' returned "+p.exitValue()+
"\nso xml-services for output, output-backup, renaming output"+
"\nhas not been executed; input-file has not been deleted as well!");
}
}
else
{//call application by Java-class
replaceTokens = getTokensToReplace(props4Call);
subsituteOtherStrings(originalFileName, replaceTokens, otherStringMap);
generateTmpOutputFileNames(originalFileName, replaceTokens, outFileNameDateMap);
// produce every time a new applRunner since the init could be incomplete or unsafe
RunnableByProperties applRunner;
applRunner = (RunnableByProperties) Class.forName(className4Call).newInstance();
applRunner.init(generateResolvedProperties(replaceTokens, iFile.getName(), outFileNameDateMap, otherStringMap));
applRunner.run();
}
return new Object[] {originalFileName, replaceTokens};
}
Für weiterfürhende Tips bin ich glücklich und dankbar

Takidoso