Ответ 1
Как насчет чего-то типа:
<a href="\\DangerServer\Downloads\MyVirusArchive.exe"
type="application/octet-stream">Don't download this file!</a>
Это внутреннее веб-приложение, в котором мы хотели бы, чтобы веб-страницы содержали ссылки на несколько утилит, которые являются Win32 EXE. EXEs доверяют и производятся нами. (не волнует, если он спрашивает, нормально ли его запустить или сохранить). Я пробовал прямую ссылку (например, C:\notepad.exe), которая работает только локально. (Это будет доля в сети). Пробовал файл:///и не работал. IE7 необходим браузеру.
Как насчет чего-то типа:
<a href="\\DangerServer\Downloads\MyVirusArchive.exe"
type="application/octet-stream">Don't download this file!</a>
Предполагается, что 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).
Вы можете видеть, как iTunes делает это, используя Fiddler, чтобы следить за действием при использовании ссылки: http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=80028216
Обратите внимание, что exe, когда установлено, установил обработчики URL-адресов для переноса "itms" с браузерами.
Не простой инженерный проект, чтобы дублировать, но определенно делать. Если вы продолжите это, пожалуйста, подумайте о том, чтобы создать соответствующее программное обеспечение с открытым исходным кодом.
В окнах указанный протокол для приложения может быть зарегистрирован в реестре. В этом 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>
Как часть решения , предложенного Ларри К, регистрация вашего собственного протокола может быть возможным решением. Веб-страница может содержать простую ссылку для загрузки и установки приложения, которое затем зарегистрировало бы собственный протокол в реестре Windows.
Затем веб-страница будет содержать ссылки с параметрами, которые приведут к открытию программы registerd и любым параметрам, указанным в ссылке. Там хорошее описание того, как это сделать на MSDN
Вы попробовали UNC-ресурс?
\\server\share\foo.exe
Вы говорите, что у вас возникли проблемы с вложением на веб-страницу ссылки на файл, который имеет расширение .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();
если приложения являются С#, вы можете использовать развертывание ClickOnce, что является хорошим вариантом, если вы не можете гарантировать, что пользователь будет иметь приложение, однако вам придется перестроить приложения с параметрами развертывания и захватить некоторые шаблоны кода из каждого проекта.
Вы также можете использовать Javascript.
Или вы можете зарегистрировать приложение для обработать новый веб-протокол, который вы можете определить. Это также может быть "протокол выбора приложения", поэтому каждый раз, когда нажимается приложение, оно ссылается на страницу вашего нового протокола, вся обработка этого протокола затем передается в ваше "приложение выбора", которое использует аргументы для поиска и запуска приложение на клиентском ПК.
НТН