C# : Tuer un processus

Signaler
Messages postés
7
Date d'inscription
dimanche 24 janvier 2010
Statut
Membre
Dernière intervention
21 octobre 2011
-
Whismeril
Messages postés
14449
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
5 avril 2020
-
[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

Messages postés
14449
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
5 avril 2020
370
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
Messages postés
14449
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
5 avril 2020
370
Bonjour,

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



Whismeril
Messages postés
792
Date d'inscription
mardi 8 juillet 2003
Statut
Membre
Dernière intervention
12 juillet 2019
7
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
Messages postés
7
Date d'inscription
dimanche 24 janvier 2010
Statut
Membre
Dernière intervention
21 octobre 2011

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 !!
Messages postés
14449
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
5 avril 2020
370
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
Messages postés
7
Date d'inscription
dimanche 24 janvier 2010
Statut
Membre
Dernière intervention
21 octobre 2011

Exactement il fallait fermer les filestream ouvert ;)
Voilà le code que j'ai utilisé


foreach (Stream stream in m_streams)
stream.Close();
Messages postés
14449
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
5 avril 2020
370
Bien,
peux tu cliquer sur réponse acceptée?

Whismeril