private string[] signDocuments() { String officeDocument = Properties.Resources.OfficeObject; X509Certificate2 certificate = CertificateUtils.GetCertificate(); if (certificate != null) { List <string> signedDocuments = new List <string>(); if (chkCopyDocuments.Checked) { documentsSignStatus = FileOperations.Copy(compatibleDocumentsList, txtPath.Text, chkOverwrite.Checked); foreach (FileStatus documentToSign in documentsSignStatus) { if (documentToSign.Status == Status.Success) { try { loadDigitalSignature(documentToSign.Path); bool signatureExists = digitalSignature.DocumentHasSignature(certificate); if (signatureExists) { if (!chkNotSignIfAlreadyExists.Checked) { digitalSignature.SetOfficeDocument(officeDocument); digitalSignature.SignDocument(certificate); } else { documentToSign.Status = Status.SignatureAlreadyExists; } } else { digitalSignature.SetOfficeDocument(officeDocument); digitalSignature.SignDocument(certificate); } signedDocuments.Add(documentToSign.Path); if (digitalSignature.DocumentType.Equals(Types.XpsDocument)) { digitalSignature.xpsDocument.Close(); } else { digitalSignature.package.Close(); } } catch (NullReferenceException) { documentToSign.Status = Status.GenericError; } catch (FileFormatException) { documentToSign.Status = Status.CorruptedContent; } catch (IOException e) { documentToSign.Status = Status.InUseByAnotherProcess; } catch (Exception e) { documentToSign.Status = Status.GenericError; } } } } else { foreach (string documentToSign in compatibleDocuments) { Status st = new Status(); try { loadDigitalSignature(documentToSign); bool signatureExists = digitalSignature.DocumentHasSignature(certificate); if (signatureExists) { if (!chkNotSignIfAlreadyExists.Checked) { digitalSignature.SetOfficeDocument(officeDocument); digitalSignature.SignDocument(certificate); st = Status.ModifiedButNotBackedUp; } else { st = Status.SignatureAlreadyExistsNotBackedUp; } } else { digitalSignature.SetOfficeDocument(officeDocument); digitalSignature.SignDocument(certificate); st = Status.ModifiedButNotBackedUp; } signedDocuments.Add(documentToSign); if (digitalSignature.DocumentType.Equals(Types.XpsDocument)) { digitalSignature.xpsDocument.Close(); } else { digitalSignature.package.Close(); } } catch { st = Status.NotSigned; } FileStatus documentSignStatus = new FileStatus(documentToSign, st); documentsSignStatus.Add(documentSignStatus); } } return(signedDocuments.ToArray()); } return(null); }