ciao, non so che pesci prendere..
ho una classe per la firma digitale dei file, utilizza una libreria acquistata da infocert, le bouncycastle e una dll esterna come driver..
fin qui niente di che..
su windows 7 non ho problemi mentre su windows 8 al termine della procedura di firma corretta il processo rimane appeso e non si chiude nemmeno forzando con System.exit()
i produttori della libreria infocert mi garantiscono che non è un problema della loro libreria, quindi suppongo sia la dll che tiene lokkato qualcosa...
secondo voi ho un modo per forzare il kill ?
riporto il codice di esempio utilizzato (si lo so si dovrebbe utilizzare il finally per le close e il flush, questo esempio non è mio, è di infocert.. ma anche correggendo il risultato non cambia)
ma magari qualcuno vedo qualcosa che mi sfugge o sa qualcosa del perchè su windows 8 si blocca e sul 7 per esempio no !!!
codice:public class TestFirma { /** * @param args * @throws Exception * @throws GeneralSecurityException */ public static void main(String[] args) throws GeneralSecurityException, Exception { // Configurazione Security Provider Security.addProvider(new BouncyCastleProvider()); String fileToSign = "Test4.java"; String signedFile = fileToSign + ".p7m"; ISignMessage smsg = null; BufferedInputStream bis = null; FileOutputStream fos = null; // Impostazione con il driver delle "direttive" di firma CryptoDriver driver = new CryptoDriver(); driver.setSignatureType(CryptoDriver.LEGAL_SIGNATURE); //driver.setSigningCN("FERRARI ANDREA"); // Imposto il PIN ed il path della libreria per accedere al dispositivo hw CryptoEngine engine = new HardwareEngine("11111111", "C:/WINDOWS/system32/SissP11.dll",1); engine.open(); smsg = SignMessageFactory.getInstance().createISignMessage(driver, engine); // Impostazione input e output stream bis = new BufferedInputStream(new FileInputStream(fileToSign)); smsg.setInputStream(bis); File fo = new File(signedFile); fos = new FileOutputStream(fo); smsg.setOutputStream(fos); // Generazione del doc firmato smsg.encode(driver); fos.flush(); bis.close(); fos.close(); } }



Rispondi quotando