web-dev-qa-db-fra.com

Comment lancer un EXE à partir d'une page Web (asp.net)

Il s'agit d'une application Web interne dans laquelle nous souhaitons que les pages Web contiennent des liens vers plusieurs utilitaires qui sont Win32 EXE. Les EXE sont fiables et produits par nous. (ne vous souciez pas s'il vous demande si son ok pour exécuter ou enregistrer). J'ai essayé le lien direct (par exemple C:\notepad.exe) qui ne fonctionne que localement. (Ce sera un partage sur le réseau). Fichier testé: /// et n'a pas fonctionné. IE7 est le navigateur nécessaire.

27
JoeJoe

Que diriez-vous de quelque chose comme:

<a href="\\DangerServer\Downloads\MyVirusArchive.exe" 
  type="application/octet-stream">Don't download this file!</a>
28
Cerebrus

Cela suppose que l'exe se trouve quelque part sur l'ordinateur de l'utilisateur:

<a href="javascript:LaunchApp()">Launch the executable</a>

<script>
function LaunchApp() {
if (!document.all) {
  alert ("Available only with Internet Explorer.");
  return;
}
var ws = new ActiveXObject("WScript.Shell");
ws.Exec("C:\\Windows\\notepad.exe");
}
</script>

Documentation: ActiveXObject , méthode Exec (hôte de script Windows) .

35
JLopez

Vous pouvez voir comment iTunes le fait en utilisant Fiddler pour suivre l'action lors de l'utilisation du lien: http://phobos.Apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=80028216

  1. Il télécharge un fichier js
  2. Sur Windows: le fichier js détermine si iTunes a été installé sur l'ordinateur ou non: recherche un composant de navigateur activeX si IE, ou un plugin de navigateur si FF
  3. Si iTunes est installé, le navigateur est redirigé vers une URL avec un transport spécial: itms: // ...
  4. Le navigateur appelle le gestionnaire (fourni par l'exe iTunes). Cela inclut le démarrage de l'exe s'il n'est pas déjà en cours d'exécution.
  5. iTunes exe utilise le reste de l'URL spéciale pour afficher une page spécifique à l'utilisateur.

Notez que l'exe, une fois installé, a installé des gestionnaires de protocole URL pour le transport "itms" avec les navigateurs.

Pas un simple projet d'ingénierie à dupliquer, mais certainement réalisable. Si vous continuez avec cela, veuillez envisager de rendre le logiciel approprié open source.

26
Larry K

Sous Windows, le protocole d'application spécifié peut être enregistré dans le Registre. Dans ce doc msdn montre l'inscription d'une application à un schéma d'URI.

Par exemple, un fichier exécutable 'alert.exe' doit être démarré. L'élément suivant peut être enregistré.

HKEY_CLASSES_ROOT
   alert
      (Default) = "URL:Alert Protocol"
      URL Protocol = ""
      DefaultIcon
         (Default) = "alert.exe,1"
      Shell
         open
            command
               (Default) = "C:\Program Files\Alert\alert.exe"

Ensuite, vous pouvez écrire un html pour tester

<head>
    <title>alter</title>
</head>

<body>
    <a href="alert:" >alert</a>
<body>
10
chenatu

Dans le cadre de la solution suggérée par Larry K, l'enregistrement de votre propre protocole pourrait être une solution possible. La page Web pourrait contenir un lien simple pour télécharger et installer l'application - qui enregistrerait alors son propre protocole dans le registre Windows.

La page Web contiendrait alors des liens avec des paramètres qui entraîneraient l'ouverture du programme registerd et tout paramètre spécifié dans le lien qui lui serait transmis. Il y a une bonne description de la façon de le faire sur MSDN

4
user278623

si les applications sont C #, vous pouvez utiliser déploiement ClickOnce , ce qui est une bonne option si vous ne pouvez pas garantir que l'utilisateur aura l'application, mais vous devrez recréer les applications avec le déploiement options et récupérer du code passe-partout de chaque projet.

Vous pouvez également utiliser Javascript .

Ou vous pouvez enregistrer une application pour gérer un nouveau protocole Web vous pouvez définir. Il peut également s'agir d'un protocole de "sélection d'application". Ainsi, chaque fois qu'une application est cliquée, elle renvoie à une page de votre nouveau protocole, toute la gestion de ce protocole est ensuite transmise à votre "application de sélection" qui utilise des arguments pour rechercher et lancer une application sur le PC du client.

HTH

1
Dead.Rabit

Êtes-vous en train de dire que vous avez du mal à insérer dans une page Web un lien vers un fichier qui se trouve avoir une extension .exe?

Si tel est le cas, reculez d'un pas. Imaginez que le fichier possède une extension .htm ou une extension .css. Comment pouvez-vous le rendre téléchargeable? S'il s'agit d'un lien statique, la réponse est claire: le fichier doit être dans le docroot pour l'application ASP.NET. IIS + ASP.NET sert de nombreux types de contenu: fichiers .htm, fichiers .css, fichiers .js, fichiers image, implicitement. Tous ces fichiers sont quelque part sous le docroot, qui est par défaut c:\inetpub\wwwroot, mais pour votre webapp est sûrement quelque chose de différent. Le fait que le fichier que vous souhaitez exposer ait une extension .exe ne change pas les lois de base de IIS physique. L'exe doit vivre sous le docroot. Le partage réseau peut fonctionner pour certains navigateurs.

L'alternative est bien sûr d'écrire dynamiquement le contenu du fichier directement dans Response.OutputStream. De cette façon, vous n'avez pas besoin que le fichier .exe soit dans votre docroot, mais ce n'est pas un lien de téléchargement direct. Dans ce scénario, le fichier peut être téléchargé en cliquant sur un bouton.

Quelque chose comme ça:

    Response.Clear(); 
    string FullPathFilename = "\\\\server\\share\\CorpApp1.exe";
    string archiveName= System.IO.Path.GetFileName(FullPathFilename);
    Response.ContentType = "application/octet-stream";
    Response.AddHeader("content-disposition", "filename=" + archiveName);
    Response.TransmitFile(FullPathFilename);
    Response.End();
1
Cheeso

Avez-vous essayé un partage UNC ?

\\server\share\foo.exe

1
Andrew Hare