C# : Tuer un processus

evil05 Messages postés 7 Date d'inscription dimanche 24 janvier 2010 Statut Membre Dernière intervention 21 octobre 2011 - 11 oct. 2011 à 02:27
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 - 18 oct. 2011 à 18:39
[b]Salam,
je travail sur une application où une des taches est de générer un rapport PDF et dieu merci j'ai réaliser cette tache alors quand je génére ce PDF normalement l'utilisateur a le droit de continuer à travailler dans l'application MAIS le probléme qui se pose c'est que je peux pas ouvrir le PDF généré hors l'application ( Windows - Adobe Reader ) car on me dit qu'une autre application utilise ce fichier :( ( mon application ) et si je veux l'ouvrir il faut quitter l'application .
Bref, l'utilisateur veut ouvrir le fichier PDF généré par l'application, mais mon application utilise toujours le PDF malgé que j'ai fermé le formulaire qui a généré ce fichier PDF :(
Si jamais vous pouvez m'aider à régler ce probléme soit de connaitre le processus qui est lancé ou bien je sais si jamais le formulaire n'a pas été bien fermé ./b

7 réponses

Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
12 oct. 2011 à 20:23
Bonsoir,
une autre idée à la lecture d'une autre poste.
A un moment ou un autre il faut fermer tes filestream avec la méthode Close()


Whismeril
1
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
11 oct. 2011 à 07:02
Bonjour,

as tu essayé de libérer les variables de ton formulaire avant de le fermer?
MaVariable = Nothing;



Whismeril
0
cs_louis14 Messages postés 793 Date d'inscription mardi 8 juillet 2003 Statut Membre Dernière intervention 10 février 2021 8
11 oct. 2011 à 09:15
Bonjour,
TU peux aussi changer les attributs de saring de ton fichier. Le tien doit être en Nosharing, tu devras le mettre en ShareRead afin de ouvoir l'ouvrir par une autre application.
effectivement vérifie si tu libères les variables en pemier et le handle du fichier.
Bon codage.



louis
0
evil05 Messages postés 7 Date d'inscription dimanche 24 janvier 2010 Statut Membre Dernière intervention 21 octobre 2011
11 oct. 2011 à 22:43
Merci pour votre réponse .
Ben voilà j'ai essayé de libérer les variables de mon formulaire mais toujours le meme probléme et pour changer les attributs de saring de Mon fichier, je sais pas comment le faire, ça serais gentil de votre part de me l'expliquer ^^
Sinon voilà le code qui génére le fichier PDF depuis mon rapport :

[code]


private Stream CreateStream(string name, string fileNameExtension,
Encoding encoding, string mimeType, bool willSeek)
{
Stream stream = new FileStream(name + "." + fileNameExtension,
FileMode.Create);
m_streams.Add(stream);
return stream;
}
private void Exporter_PDF()
{

string deviceInfo =
"<DeviceInfo>" +
" <OutputFormat>EMF</OutputFormat>" +
" 8.5in

" +
" 11in

" +
" <MarginTop>0.25in</MarginTop>" +
" <MarginLeft>0.25in</MarginLeft>" +
" <MarginRight>0.25in</MarginRight>" +
" <MarginBottom>0.25in</MarginBottom>" +
"</DeviceInfo>";
Warning[] warnings;
m_streams = new List<Stream>();
reportViewer1.LocalReport.Render("PDF", deviceInfo, CreateStream, out warnings);

foreach (Stream stream in m_streams)
stream.Position = 0;

MessageBox.Show(" Votre Fichier a été exporter avec succès !", "Exportation du Rapport", MessageBoxButtons.OK, MessageBoxIcon.Information);
}

[\code]

NB : si jamais je veux regénérer un rapport ça me donne une erreur dans la ligne suivante :
Stream stream = new FileStream(name + "." + fileNameExtension,
FileMode.Create);

l'erreur dit que Le processus ne peut pas accéder au fichier , car il est en cours d'utilisation par un autre processus.
c'est préske la meme erreur quand je veux y acceder à l'exterieur de l'application !!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
12 oct. 2011 à 00:27
Je ne me suis jamais servit de reportviewer, je ne te serai probablement pas d'une grande utilité.
Cependant plusieurs détails m'interpellent

dans

reportViewer1.LocalReport.Render("PDF", deviceInfo, CreateStream, out warnings); 

tu appelles CreateStream sans ses paramètres, pour autant que je sache ça ne devrait pas passer.

tu as initialisé m_streams un peu au dessus, tu ne passes qu'une fois (en tout case tu n'essayes de passer qu'une fois) dans CreateStream ou tu ajoutes un stream à ta liste, donc là
foreach (Stream stream in m_streams) 
stream.Position = 0;

la liste ne devrait contenir qu'un seul stream, et le foreach n'est pas utile.

le fait que ça bloque là:
Stream stream = new FileStream(name + "." + fileNameExtension, 
FileMode.Create); 


Me fait penser que ton fichier est déjà en lecture ou en écriture quelque part avant dans ton application.
Appelles tu CreateStream d'un autre processus?
Exécute tu filestream, streamreader ou streamwiter ailleurs?

Whismeril
0
evil05 Messages postés 7 Date d'inscription dimanche 24 janvier 2010 Statut Membre Dernière intervention 21 octobre 2011
18 oct. 2011 à 01:42
Exactement il fallait fermer les filestream ouvert ;)
Voilà le code que j'ai utilisé


foreach (Stream stream in m_streams)
stream.Close();
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
18 oct. 2011 à 18:39
Bien,
peux tu cliquer sur réponse acceptée?

Whismeril
0
Rejoignez-nous