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 Discussion :

Lancer une application depuis page asp


Sujet :

ASP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    915
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 915
    Par défaut Lancer une application depuis page asp
    bjr et bonne année à tous,
    Je souhaiterais depuis une page asp lancer une application Winodws Forms. J'ai écris cette petite procédure juste pour l'initialisation:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    sub lancerApplication()
        On error resume next
    	dim adrot
        Set adrot=Server.CreateObject("Application Windows Forms")
    	If Err.Number <> 0 Then
          Response.Write "Erreur : " & Err.number & " " & Err.Description & ("<BR>")
        End If
    	On Error GoTo 0
    end sub
    et j'ai l'erreur suivante :

    Erreur : -2147221005 006~ASP 0177~Échec de Server.CreateObject~800401f3

    L'application est sur le répertoire du site ansi que la DLL qui va avec, mais à ce stade je ne pense pas que ça vienne de là car je ne fais que l'initialisation.

    Si quelqu'un a une idée MERCI

  2. #2
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 580
    Par défaut
    Bonsoir,
    Dans le contexte de ASP classique (ASP 3.0), il n'est pas possible d'utiliser directement une application Windows Forms ou une DLL qui n'est pas un composant COM enregistré. Voici une explication détaillée des problèmes rencontrés et des solutions possibles.

    Erreur rencontrée : 800401f3

    L'erreur 800401f3 survient généralement lorsque le ProgID fourni à Server.CreateObject n'est pas valide, soit parce que :

    1. L'objet spécifié (par exemple, "Application Windows Forms") n'est pas enregistré dans le registre Windows.
    2. L'objet n'est pas compatible avec COM.

    Dans ton cas, il semble que tu essayes d'utiliser une application ou une DLL non COM-compatible. ASP classique ne peut pas instancier un objet .NET ou une application Windows Forms directement.

    Solutions possibles

    1. Utiliser WScript.Shell pour lancer une application

    Si ton but est simplement de lancer une application depuis la page ASP, la méthode la plus simple est d'utiliser l'objet WScript.Shell.
    Voici un exemple de code ASP classique :
    Code asp : 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
     
    <%
    Sub lancerApplication()
        On Error Resume Next
        Dim shell
        Set shell = Server.CreateObject("WScript.Shell")
     
        If Err.Number = 0 Then
            ' Lancer l'application avec le chemin complet
            shell.Run "C:\chemin\vers\application.exe", 1, False
            Response.Write "Application lancée avec succès.<br>"
        Else
            Response.Write "Erreur : " & Err.Number & " - " & Err.Description & "<br>"
        End If
     
        On Error GoTo 0
        Set shell = Nothing
    End Sub
     
    lancerApplication()
    %>
    Explications :

    • WScript.Shell : Permet d'exécuter des commandes ou des applications.
    • Paramètres de Run :
      • 1 : L'application s'affiche dans une fenêtre normale.
      • False : La commande ne bloque pas l'exécution de la page ASP.

    Limitations :

    • L'application se lancera sur le serveur, pas sur le poste client.
    • Si l'application nécessite une interface graphique, elle sera invisible car ASP s'exécute dans un environnement non interactif.


    2. Enregistrer une DLL en tant que composant COM

    Si tu veux utiliser une DLL ou un composant .NET, tu dois la convertir en composant COM et l'enregistrer. Voici comment procéder :

    1. Créer une DLL COM-compatible :

      • Si la DLL est en .NET, elle doit être marquée comme COM-visible (voir explication précédente si nécessaire).
      • Une fois créée, utilise regasm.exe pour l'enregistrer.

    2. Enregistrer la DLL sur le serveur :

      • Assure-toi que la DLL est accessible au compte utilisateur sous lequel IIS s'exécute (IIS_IUSRS).
      • Utilise regsvr32.exe (pour DLL classiques) ou regasm.exe (pour DLL .NET) pour enregistrer le composant.

    3. Utiliser le ProgID dans ASP :



    3. Exécuter des commandes avec cmd.exe

    Si ton application peut être lancée via une commande, utilise cmd.exe pour exécuter la commande directement depuis ASP.
    Exemple :
    Code asp : 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
     
    <%
    Sub lancerApplication()
        On Error Resume Next
        Dim shell
        Set shell = Server.CreateObject("WScript.Shell")
     
        If Err.Number = 0 Then
            ' Exécuter une commande via cmd.exe
            shell.Run "cmd.exe /C C:\chemin\vers\application.exe", 0, False
            Response.Write "Commande exécutée.<br>"
        Else
            Response.Write "Erreur : " & Err.Number & " - " & Err.Description & "<br>"
        End If
     
        On Error GoTo 0
        Set shell = Nothing
    End Sub
     
    lancerApplication()
    %>




    Points importants

    1. Permissions utilisateur :

      • Assure-toi que le compte utilisateur sous lequel IIS s'exécute (IIS_IUSRS ou Network Service) a les permissions nécessaires pour exécuter l'application ou accéder aux fichiers requis.

    2. Sécurité :

      • Exécuter des applications depuis ASP peut présenter un risque de sécurité. Assure-toi que seules des commandes sûres peuvent être exécutées.

    3. Exécution côté serveur :

      • Tout ce qui est exécuté via ASP classique tourne sur le serveur. Si ton objectif est de lancer une application sur le poste client, ce n'est pas possible avec ASP.




    Édite:
    Je t'invite vraiment a passer en aspx avec visual studio community. Tu es encore au début de ta formation en ASP.

    Sur le forum VB.net tu auras pléthore d'internaute susceptible de t'aider, alors que moi je passe par là car jes sais que tu postes des questions ; mais je suis de toute évidence le seule.

    Asp3 est définitivement obsolètes.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    915
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 915
    Par défaut
    Bjr et bonne année, merci d'avoir eu l'idée de voir si j'avais posté des messages !

    J'ai fait un petit test pour utiliser ce que tu m'indiques en essayant de lancer la commande "cmd.exe".

    1. Utiliser WScript.Shell pour lancer une application
    L'application se lancera sur le serveur, pas sur le poste client.
    Si l'application nécessite une interface graphique, elle sera invisible car ASP s'exécute dans un environnement non interactif.
    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
     
    sub lancerApplication()
        On error resume next
        Dim shell
        Set shell = Server.CreateObject("WScript.Shell")
     
        If Err.Number = 0 Then
            shell.Run "C:\inetpub\wwwroot\Comptes\cmd.exe",1,False
            Response.Write "Application lancée avec succès.<br>"
                Else
            Response.Write "Erreur : " & Err.Number & " - " & Err.Description & "<br>"
        End If
     
        On Error GoTo 0
        Set shell = Nothing
    end sub
    J'ai choisi "cmd.exe" car elle ne nécessite pas d'interface graphique
    Je n'ai aucune erreur à l'exécution mais rien ne démarre.
    Mais comment voir si la commande s'exécute si elle se lance que sur le serveur ?

  4. #4
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 580
    Par défaut
    Bonjour et bonne année à toi également.
    Cm.exe ce referme automatiquement après exécution, donc fugitif.

    Exécutes un fichier.bat
    Code fichier.bat : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Echo test
    Pause
    Si tu fait un run sur le fichier bat la fenêtre restera ouverte sur le serveur tant que tu n'aquiteras pas l'instruction pause.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    915
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 915
    Par défaut
    bjr et merci,
    Mon fichier bat s'exécute depuis l'explorateur mais pas quand je le lance depuis la page asp.Pas d'erreur d'exécution mais rien ne s'affiche.

    Si tu fait un run sur le fichier bat la fenêtre restera ouverte sur le serveur tant que tu n'aquiteras pas l'instruction pause.
    Que veut tu dire exactement ?

  6. #6
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 580
    Par défaut
    Bonjour,
    L'instruction pause dans le fichier bat attend que tu appuis sur une touche du clavier pour quitter la fenêtre windows.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <%
    Dim shell
    Set shell = Server.CreateObject("WScript.Shell")
     
    ' Chemin vers le fichier batch
    Dim cheminFichier
    cheminFichier = "C:\inetpub\wwwroot\Comptes\fichier.bat"
     
    ' Exécution du fichier batch avec fenêtre maximisée et attente de fin d'exécution
    shell.Run """" & cheminFichier & """", 3, True
     
    ' Libérer l'objet
    Set shell = Nothing
    %>

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    915
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 915
    Par défaut
    bjr et merci j'ai essayé avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    shell.Run """" & chemin & """", 3, true
    mais ça boucle et bloque le serveur.

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    915
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 915
    Par défaut
    Je viens de tester le meme code sous vb.net et ça fonctionne, il doit y avoir une manip avec IIS que je n'arrive pas à trouver...
    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
     
    Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
        On Error Resume Next
        Dim Shell
        Dim chemin
        Shell = CreateObject("WScript.Shell")
        If Err.Number = 0 Then
            chemin = "C:\inetpub\wwwroot\Comptes\nouveau.bat"
            Shell.Run("""" & chemin & """", 3)
        Else
            MessageBox.Show("Erreur : " & Err.Number & " - " & Err.Description)
        End If
        On Error GoTo 0
        Shell = Nothing
    End Sub

  9. #9
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 580
    Par défaut
    Bonjour,
    shell.Run """" & chemin & """", 3, true
    Cette commande attend que le programme soit terminé avant de retourner la main au serveur.

    En d'autres termes il faut acquitter l'instruction pause du fichier bat, en cliquant sur une touche, pour que le chell libraire le serveur iis.

    Le serveur IIS est bloqué pendant toute la mobilisation du Shell.

    Il faut donc être sur le serveur, j'ai imaginé que tu travaillais en local.

    Tu peux ouvrir le gestionnaire de tâches pour vérifier que le bât ouvre bien un fenêtre cm.exe.

    L'idée n'étant pas forcément de pouvoir clôturer le pause mais de savoir que le Shell est bien exécuté.

    Il est bien évidemment que le traitement que tu dois exécuter Via shell doit être terminé avant que IIS reaffiche sa nouvelle page, sur si IIS doit tenir compte du traitement. Le code fournir devrait apporter la preuve que tout ça fonctionne

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    915
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 915
    Par défaut
    bjr et grand merci pour ton aide !
    Tu peux ouvrir le gestionnaire de tâches pour vérifier que le bât ouvre bien un fenêtre cm.exe.
    L'idée n'étant pas forcément de pouvoir clôturer le pause mais de savoir que le Shell est bien exécuté.
    En effet j'ai deux processus : cmd.exe et conhost.exe qui s'exécutent si j’arrête conhost ou cmd ça me débloque le serveur.

    Il est bien évidemment que le traitement que tu dois exécuter Via shell doit être terminé avant que IIS reaffiche sa nouvelle page, sur si IIS doit tenir compte du traitement. Le code fournir devrait apporter la preuve que tout ça fonctionne
    Le problème est que IIS n'affiche pas sa nouvelle page, il va jusqu'au bout de la procedure mais pas plus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Response.Write "Application lancée avec succès." & "<br>"

Discussions similaires

  1. Comment lancer une application depuis un service ?
    Par bhf37 dans le forum Langage
    Réponses: 7
    Dernier message: 05/03/2009, 14h05
  2. Réponses: 3
    Dernier message: 31/08/2008, 16h33
  3. Lancer une application depuis une fenêtre gtk
    Par cyrilleG dans le forum GTK+ avec Python
    Réponses: 11
    Dernier message: 29/09/2007, 22h03
  4. Réponses: 9
    Dernier message: 11/01/2007, 21h23
  5. [VB.NET]Lancer une application depuis MonProg
    Par PM_calou dans le forum Windows Forms
    Réponses: 3
    Dernier message: 27/09/2006, 11h42

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