Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - mail pdf C#
Forum - C# / VB.NET - mail pdf C#

Avatar
lorenzo (Normal User)
Guru


Messaggi: 1178
Iscritto: 15/04/2008

Segnala al moderatore
Postato alle 15:37
Giovedì, 05/03/2009
Uso questo codice per spedire un pdf con la mail

Codice sorgente - presumibilmente C++

  1. System.Net.Mail.MailMessage message = new System.Net.Mail.MailMessage();
  2.             message.To.Add(messaggio.DESTINAZIONE);
  3.             message.Subject = messaggio.OGGETTO;
  4.             message.From = new System.Net.Mail.MailAddress("\"Monza\""+ messaggio.MITTENTE);
  5.             message.Body = messaggio.TESTO;
  6.             message.Attachments.Add(
  7.                 new System.Net.Mail.Attachment(messaggio.ALLEGATO));
  8.             System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient(opzioni.PATHUSCITA);
  9.  
  10.             smtp.Send(message);
  11.             message.Dispose();



il problema è che quando tento di fare File.Move(..) del pdf per spostarlo in un'atra cartella mi viene generata un'eccezione. Mi dice che non posso accedere al file in questione perché è già in uso da un altro processo....
difatti anche in taskmanager vedo un processo AcroRd32.exe attivo.

Come posso fare per killare il processo da codice senza usare la process.kill?
(non posso usarla perché se uccido tutti i processi acro che trovo magari chiudo anche un pdf che l'utente stava leggendo normalmente)

PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 21:21
Giovedì, 05/03/2009
File.Move non c'è nel codice che hai scritto, il che lo rende, quindi, abbastanza inutile. L'unico modo possibile è terminare il processo, non c'è altra via.

PM Quote
Avatar
lorenzo (Normal User)
Guru


Messaggi: 1178
Iscritto: 15/04/2008

Segnala al moderatore
Postato alle 21:25
Giovedì, 05/03/2009
l'istruizione file.move è in un'altra classe del progetto

non c'é modo di ottenere l'id del processo dalle righe di codice che ho postato?

PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 21:27
Giovedì, 05/03/2009
Infatti: il codice che hai postato non c'entra niente con quello che chiedi. Potevi piuttosto postare la classe interessata, non ti pare?

L'id del processo è definito dalla proprietà Id dell'oggetto process associato al processo in questione.

PM Quote
Avatar
lorenzo (Normal User)
Guru


Messaggi: 1178
Iscritto: 15/04/2008

Segnala al moderatore
Postato alle 21:35
Giovedì, 05/03/2009
forse non mi sono spiegato bene....

io non creo nessun processo di acrobat reader nel progetto. Semplicemente quando attacco il pdf alla email si crea in task manager il processo che dovrei killare. Quando, dopo aver inviato la mail, devo spostare il pdf in un'altra cartella, mi viene impedito.

PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 16:50
Venerdì, 06/03/2009
Ma io non mai fatto menzione al fatto che tu avviassi il processo. Ti ho solo detto come ottenere il suo id.

PM Quote
Avatar
lorenzo (Normal User)
Guru


Messaggi: 1178
Iscritto: 15/04/2008

Segnala al moderatore
Postato alle 17:49
Venerdì, 06/03/2009
ho capito come ottenere l'id di un processo.

ma come faccio ad ottenere l'id di un processo del quale so solo il il nome, che potrebbe comunque essere uguale a quello di altri precessi presenti nel sistema?

PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 15:57
Sabato, 07/03/2009
Codice sorgente - presumibilmente VB.NET

  1. Dim P() As Process = Process.GetProcessesByName("nome processo")
  2. If P.Length > 0 Then
  3.   'P contiene una lista di tutti i processi con quel nome
  4. End If


P(n-1).Id è l'id dell'n-esimo processo aperto con quel nome. Comunque penso che acrobat reader, come firefox, usi un solo processo e più appdomain, quindi P dovrebbe contenere sempre un solo elemento.

p.s.: non mi ricordo mai se il nome del processo debba anche contenere l'estensione (di solito ".exe").

PM Quote
Avatar
lorenzo (Normal User)
Guru


Messaggi: 1178
Iscritto: 15/04/2008

Segnala al moderatore
Postato alle 16:37
Sabato, 07/03/2009
si ci vuole il .exe

comunque dopo provo........però è strano che attaccando alla mail il pdf viene eseguito adobe reader

tu sai il perché?
(io penso che sia il formato strano del pdf...)

PM Quote