Comment lancer un EXE à partir d'une page Web (asp.net)
il s'agit d'une application Web interne où nous aimerions que les pages Web contiennent des liens vers plusieurs utilitaires qui sont Win32 EXE. Les exs sont fiables et produits par nous. (ne vous souciez pas si elle demande si son ok pour exécuter ou sauver). J'ai essayé le lien direct (par ex. C:notepad.exe) qui ne fonctionne que localement. (Ce sera un partage sur le réseau). Essayé File:/// et n'ont pas de travail. IE7 est le navigateur nécessaire.
8 réponses
Que Diriez-vous de quelque chose comme:
<a href="\DangerServer\Downloads\MyVirusArchive.exe"
type="application/octet-stream">Don't download this file!</a>
cela suppose que l'exe est quelque part que vous connaissez 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 , Exec Method (Windows Script Host) .
vous pouvez voir comment iTunes le fait en utilisant Fiddler pour suivre l'action en utilisant le lien: http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=80028216
- il télécharge un fichier js
- sous 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
- Si iTunes est installé ensuite, le navigateur est redirigé vers une URL avec un transport spécial: itms://...
- le navigateur invoque 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.
- iTunes exe utilise le reste de l'url à afficher une page spécifique à l'utilisateur.
notez que l'exe, une fois installé, a installé des gestionnaires de protocole D'URL pour le transport "itms" avec les navigateurs.
pas un simple projet d'ingénierie à dupliquer, mais certainement faisable. Si vous allez de l'avant avec cela, s'il vous plaît envisager de rendre le logiciel APPROPRIÉ open source.
dans windows, le protocole spécifié pour l'application peut être enregistré dans le Registre. Dans ce msdn doc montre L'enregistrement d'une Application à un système URI.
par exemple, une alerte de fichiers exécutables.exe ' doit commencer. 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"
alors vous pouvez écrire un html pour tester
<head>
<title>alter</title>
</head>
<body>
<a href="alert:" >alert</a>
<body>
dans le cadre de la solution que Larry K a suggéré, 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 contiendra alors des liens avec des paramètres qui résulteront dans le programme registerd étant ouvert et tous les paramètres spécifiés dans le lien étant passé à il. Il ya une bonne description de la façon de le faire sur MSDN
êtes-vous en train de dire que vous avez de la difficulté à insérer dans une page web un lien vers un fichier qui se trouve avoir un .l'extension de l'exe?
si c'est le cas, alors reculez d'un pas. Imaginez que le fichier ait un .htm extension, ou une .css. Comment Pouvez-vous rendre cela téléchargeable? Si c'est un lien statique, alors la réponse est claire: le fichier doit être dans le docroot pour le ASP.NET app. IIS + ASP.NET offre de nombreux types de contenu: .les fichiers htm, .des fichiers css .js fichiers, fichiers image, implicitement . Tous ces fichiers sont quelque part sous docroot, qui par défaut est c:\inetpub\wwwroot, mais pour votre webapp est sûrement quelque chose de différent. Le fait que le dossier que vous voulez exposer a un .l'extension exe ne change pas les lois fondamentales de la physique IIS. L'exe doit vivre sous le docroot. La chose de partage de réseau pourrait fonctionner pour certains navigateurs.
l'alternative est bien sûr d'écrire dynamiquement le contenu de le fichier directement à la Réponse.OutputStream. De cette façon, vous n'avez pas besoin .exe pour être dans votre point d'entrée unique, mais il n'est pas un lien de téléchargement direct. Dans ce scénario, le fichier peut être téléchargé en un clic de 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();
si les applications sont C#, vous pouvez utiliser ClickOnce deployment , ce qui est une bonne option si vous ne pouvez pas garantir l'utilisateur aura l'application, cependant vous aurez à re-construire les applications avec des options de déploiement et de saisir du code boilerplate de chaque projet.
vous pouvez également utiliser Javascript .
ou vous pouvez enregistrer une application à gérer un nouveau protocole web vous pouvez définir. Cela pourrait aussi être un protocole de "sélection d'application", de sorte que chaque fois qu'une application est cliquée il serait lien à une page sur votre nouveau protocole, toute la manipulation de ce protocole est ensuite passé à votre" application de sélection " qui utilise des arguments pour trouver et lancer une application sur le PC des clients.
HTH