IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

Problème avec System.Diagnostics.Process.Start();


Sujet :

ASP.NET

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2009
    Messages : 81
    Par défaut Problème avec System.Diagnostics.Process.Start();
    Bonjour à tous!

    J'ai un gros problème, je fait une application en ASP.NET et j'utilise un System.Diagnostics.Process.Start(lienDuFichierSurLeServeur) pour pouvoir ouvrir un fichier de n'importe quel type.
    Cela fonctionne très bien en local mais par contre ça ne fonctionne pas quand je le teste sur le serveur de l'entreprise.

    J'ai fait des recherches et je pense que c'est dû au droits de l'application ASP.NET.
    Voilà ce que j'ai trouvé, c'est sensé donner les droits de l'utilisateur connecté à l'application (si j'ai bien compris) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <identity impersonate="true" />
    Ceci est à mettre dans le fichier web.config (ref http://msdn.microsoft.com/en-us/libr...8VS.71%29.aspx)

    Quand je test cette configuration en local, tout fonctionne normalement.
    Mais si je le mets sur le serveur j'obtiens cette erreur à l'ajout d'un fichier :
    Logon failure: unknown user name or bad password.
    Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

    Exception Details: System.IO.IOException: Logon failure: unknown user name or bad password.


    Source Error:

    Line 805: {
    Line 806: //si il n'existe pas, on le copie dans son emplacement.
    Line 807: FileUpload1.PostedFile.SaveAs((string)ViewState["emplacement"] + "//" + fileName);
    Line 808:
    Line 809:
    des idées?
    Merci d'avance!


    PS : j'arrive à ajouter et supprimer les fichiers qui sont sur le serveur avec asp.net. Le problème est uniquement des les ouvrir avec System.Diagnostics.Process.

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 488
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 488
    Par défaut
    Je vous conseil vivement de ne pas faire de "System.Diagnostics.Process.Start(lienDuFichierSurLeServeur)", c'est extrêmement dangereux et je ne vois pas d'utiliser autre que faire un trou de sécurité.

    C'est "System.Diagnostics.Process.Start" ou "FileUpload1.PostedFile.SaveAs" qui pose problème ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2009
    Messages : 81
    Par défaut
    Salut bacelar!
    Merci de ton aide .
    Mon problème est uniquement du au Process.Start().

    J'ai lu qu'enfait le "Process.Start" ne fonctionne pas chez le client mais uniquement sur le server et en local parce qu'en local je suis client et serveur.

    J'ai opter pour un système de "téléchargement" voici mon code jusqu'à maintenant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
            try
                {
                    string filename = bouton.CommandName;
     
     
                        string path = bouton.CommandArgument;
     
                        System.IO.FileInfo file = new System.IO.FileInfo(path + "\\"+filename);
     
     
                            Response.Clear();
     
                            Response.AddHeader("Content-Disposition", "attachment; filename=" + '"'+file.Name+'"');
     
                            Response.AddHeader("Content-Length", file.Length.ToString());
     
                            Response.ContentType = "application/octet-stream";
                            Response.WriteFile(file.FullName);
     
    // Response.End() me génère une erreur.
                            Response.End(); 
     
     
     
     
                }
                catch (Exception exception)
                {
     
                    return;
                }
    Tout à l'air de fonctionner normalement (en tout cas en local) le seul problème est que "Response.End()" me génère une erreur, mais sans Response.End() cela fonctionne aussi O_o sans générer d'erreur.

    Voici l'exception générer par Response.End() :

    Impossible d'évaluer l'expression, car le code est optimisé ou un frame natif se trouve en haut de la pile des appels
    Est-il indispensable?

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 488
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 488
    Par défaut
    Je comprends de moins en moins, vous downloadez le code vers le client (le browser) ou vous uploadez le code vers le serveur Web (IIS) ?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2009
    Messages : 81
    Par défaut
    Le client télécharger les fichiers qui sont sur le serveur.

    Le fileupload était une fonctionnalité qui plantait à cause du <identity impersonate="true" />

    Mais j'ai laissé tombé cette configuration donc pas de soucis pour le fileupload.

    Maintenant je me base sur le téléchargement.

    Merci de ton intérêt.

  6. #6
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 488
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 488
    Par défaut
    STOP.

    C'est quoi le problème initial ?
    On verra la solution après.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2009
    Messages : 81
    Par défaut


    Problème initial :

    Permettre au client d'ouvrir grâce à l'application Web, n'importe quel type de fichier qui se trouve sur le serveur.

    Fonctionnement:

    Les documents sont dans une gridview avec un bouton ouvrir. Quand le client clique sur ouvrir, j'aimerais qu'il puisse justement ouvrir le document (qui peut être .pdf, .doc, .jpg ou même .xls.

  8. #8
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 488
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 488
    Par défaut
    Le "Response.ContentType" doit correspondre au type du fichier.
    Le viewer du type de fichier doit déjà être sur le client.
    Il n'y a pas de "Process.Start" dans le périmètre.

  9. #9
    Membre Expert
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Par défaut
    Comme l'a souligné Bacelar, un Process.Start n'a rien à faire là, car tu ouvrirais le document sur le serveur et le client ne le verrait jamais.
    Blog - Articles - Framework

    MSDN vous aide, si si, alors n'hésitez pas à y faire un tour avant de poser une question.
    Ah, et n'oubliez pas, Google peut répondre à la majorité de vos questions.

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2009
    Messages : 81
    Par défaut
    Merci de votre aide! J'utilise maintenant "Response" et ça fonctionne!

    ça fonctionne très bien en test en local.
    ça fonctionne très bien sur le serveur avec IE mais avec Firefox ça plante au rafraichissement de la page O_O avec une erreur XML "aléatoire" qui veut absolument rien dire.

    exemple d'une de mes erreurs sous FF :
    Erreur d'analyse XML : mal formé
    Emplacement : http://lienDeLaPage?PKComp=2491024
    Numéro de ligne 1, Colonne 2 :l//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    -^
    Devrais-je mettre ce topic résolu et refaire un poste vu que ce n'est plus le même topic?

    Bonne journée!

  11. #11
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 488
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 488
    Par défaut
    Utilisez Fiddler (http://www.fiddler2.com/fiddler2/) pour vérifier le contenu transféré.
    J'ai l'impression que vous avez commencez à envoyer le début de la page aspx avant de faire "Response.Clear();"

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2009
    Messages : 81
    Par défaut
    Merci bacelar,

    Je regarderais demain pour "Fiddler", ça n'a pas l'air facile à prendre en main.

    J'ai regardé du côté Response.Clear() et effectivement il ne supprime pas les headers en tampon.

    J'ai remarqué que l'erreur ne survient pas au rafraichissement de la page mais plutôt quand je fait une action sur la page (changer de page, changer d'onglet) après avoir ouvert un fichier donc sa voudrait dire que la page est mal construite après l'ouverture d'un fichier.

    Je sais pas si j'ai été assez clair. Demandez moi si vous avez besoin de plus de détails.

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2009
    Messages : 81
    Par défaut
    Bon j'ai pas trouvé de solution au bug sur FireFox pour l'instant mais je vous donne quand même le code que j'ai actuellement mis en place qui fonctionne sur IE et en partie sur FF.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
                try
                {
                    string filename = bouton.CommandName;
     
     
                    string path = bouton.CommandArgument;
     
                    System.IO.FileInfo file = new System.IO.FileInfo(path + "\\" + filename);
     
     
     
                    Response.Clear();
     
                    Response.AddHeader("Content-Disposition", "attachment; filename=" + '"' + file.Name + '"');
     
                    Response.AddHeader("Content-Length", file.Length.ToString());
     
                    Response.ContentType = "application/octet-stream";
                    Response.WriteFile(file.FullName);
     
                }
                catch (Exception exception)
                {
                    erreurFichier.Text = "Le document est introuvable ou en cours d'utilisation.";
                    succesFichier.Text = "";
                    return;
                }
    Si vous voyez le bug, merci de me notifier.

    Bonne journée à tous!

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2009
    Messages : 81
    Par défaut
    Bonjour à tous!

    J'ai trouvé la solution, j'ai pas approfondie du "pourquoi ça marche mieux que l'autre façon de faire" même que je devrais mais la voilà pour les prochains :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
     
          try
                {
                    string filename = bouton.CommandName;
     
                    string path = bouton.CommandArgument;
     
                    System.IO.FileInfo file = new System.IO.FileInfo(path + "\\" + filename);
                    Response.Clear();
     
                    Response.AppendHeader("Content-Disposition", "attachment; filename=" + '"' + file.Name + '"');
     
                    Response.ContentType = "application/octet-stream";
     
                    Response.TransmitFile(file.FullName);
     
                    Response.End();
     
                }
    catch(Exception exception){...}
    Bonne journée!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème Utilisation System.Diagnostics.Process.Start
    Par arngrimur dans le forum ASP.NET
    Réponses: 14
    Dernier message: 02/11/2011, 16h51
  2. System.Diagnostics.Process.Start probleme d'Authentification
    Par ecureuilmasque dans le forum VB.NET
    Réponses: 0
    Dernier message: 04/06/2010, 15h21
  3. Problème avec System.Diagnostics
    Par Rserge dans le forum Langage
    Réponses: 2
    Dernier message: 02/03/2010, 17h56
  4. Réponses: 0
    Dernier message: 12/01/2010, 10h51
  5. problème avec GET DIAGNOSTICS
    Par hpghost dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 07/07/2004, 11h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo