Подтвердить что ты не робот

Как запустить EXE с веб-страницы (asp.net)

Это внутреннее веб-приложение, в котором мы хотели бы, чтобы веб-страницы содержали ссылки на несколько утилит, которые являются Win32 EXE. EXEs доверяют и производятся нами. (не волнует, если он спрашивает, нормально ли его запустить или сохранить). Я пробовал прямую ссылку (например, C:\notepad.exe), которая работает только локально. (Это будет доля в сети). Пробовал файл:///и не работал. IE7 необходим браузеру.

4b9b3361

Ответ 1

Как насчет чего-то типа:

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

Ответ 2

Предполагается, что exe находится где-то на компьютере пользователя:

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

Документация: ActiveXObject, Метод Exec (Windows Script Host).

Ответ 3

Вы можете видеть, как iTunes делает это, используя Fiddler, чтобы следить за действием при использовании ссылки: http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=80028216

  • Загружает файл js
  • В окнах: файл js определяет, была ли установлена ​​iTunes на компьютере или нет: ищет компонент ActiveX-браузера, если IE или плагин браузера, если FF
  • Если iTunes установлен, браузер перенаправляется на URL со специальным транспортом: itms://...
  • Браузер вызывает обработчик (предоставляется iTunes exe). Это включает запуск exe, если он еще не запущен.
  • iTunes exe использует остальную часть специального URL-адреса для отображения конкретной страницы пользователю.

Обратите внимание, что exe, когда установлено, установил обработчики URL-адресов для переноса "itms" с браузерами.

Не простой инженерный проект, чтобы дублировать, но определенно делать. Если вы продолжите это, пожалуйста, подумайте о том, чтобы создать соответствующее программное обеспечение с открытым исходным кодом.

Ответ 4

В окнах указанный протокол для приложения может быть зарегистрирован в реестре. В этом msdn doc показано, как регистрировать приложение в схеме URI.

Например, запускается исполняемый файл 'alert.exe'. Можно зарегистрировать следующий элемент.

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"

Затем вы можете написать html для тестирования

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

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

Ответ 5

Как часть решения , предложенного Ларри К, регистрация вашего собственного протокола может быть возможным решением. Веб-страница может содержать простую ссылку для загрузки и установки приложения, которое затем зарегистрировало бы собственный протокол в реестре Windows.

Затем веб-страница будет содержать ссылки с параметрами, которые приведут к открытию программы registerd и любым параметрам, указанным в ссылке. Там хорошее описание того, как это сделать на MSDN

Ответ 6

Вы попробовали UNC-ресурс?

\\server\share\foo.exe

Ответ 7

Вы говорите, что у вас возникли проблемы с вложением на веб-страницу ссылки на файл, который имеет расширение .exe?

Если это так, сделайте один шаг назад. Представьте, что файл имеет расширение .htm или расширение .css. Как вы можете сделать это загружаемым? Если это статическая ссылка, тогда ответ ясен: файл должен находиться в docroot для приложения ASP.NET. IIS + ASP.NET поддерживает множество видов контента:.htm файлы, файлы .css,.js, файлы изображений, неявно. Все эти файлы находятся где-то под docroot, который по умолчанию - c:\inetpub\wwwroot, но для вашего webapp, безусловно, что-то другое. Тот факт, что файл, который вы хотите открыть, имеет расширение .exe, не изменяет основные законы физики IIS. Exe должен жить под docroot. Сетевая доля может работать для некоторых браузеров.

Альтернативой, конечно же, является динамическая запись содержимого файла непосредственно в Response.OutputStream. Таким образом, вам не нужен .exe, чтобы быть в вашем docroot, но это не прямая ссылка для скачивания. В этом случае файл можно загрузить нажатием кнопки.

Что-то вроде этого:

    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();

Ответ 8

если приложения являются С#, вы можете использовать развертывание ClickOnce, что является хорошим вариантом, если вы не можете гарантировать, что пользователь будет иметь приложение, однако вам придется перестроить приложения с параметрами развертывания и захватить некоторые шаблоны кода из каждого проекта.

Вы также можете использовать Javascript.

Или вы можете зарегистрировать приложение для обработать новый веб-протокол, который вы можете определить. Это также может быть "протокол выбора приложения", поэтому каждый раз, когда нажимается приложение, оно ссылается на страницу вашего нового протокола, вся обработка этого протокола затем передается в ваше "приложение выбора", которое использует аргументы для поиска и запуска приложение на клиентском ПК.

НТН