Мы разрабатываем сайт, который будет работать только в интрасети, и на компьютерах с доступом к этой интрасети будет установлен этот исполняемый файл. У нас не может быть «Хотите открыть [имя файла] .exe?» подсказки. Щелкните ссылку, и программа начнет работу.
Я понимаю, что давать веб-сайтам возможность запускать исполняемые файлы на клиентской машине - это очень и очень плохо, но руководство отказывается сдвинуться с мертвой точки.
На машинах будет Windows (XP или выше) с Firefox 3.





Единственный способ, которым я мог себе представить эту работу, - это какой-то элемент управления ActiveX, который запускал бы ваш исполняемый файл, но я не знаю, насколько это возможно с Firefox.
Это должно быть одной из тех вещей, в которых вы должны отказываться сдвигаться с места, а не руководство.
@ Грант: Если ваш босс настаивает на том, чтобы заплатить вам за что-то совершенно неправильное, что - в конечном итоге - укусит его и компанию в тылу и не прислушается к мнению знающего разработчика, то вам следует подумать о работе там, где ваше мнение более высоко ценится.
Я рекомендую вам взглянуть на Adobe Flex / Air, он разработан с учетом этой модели и присущей безопасности двери сарая, которую она открывает.
Ссылка - 404. Вот почему в ответах никогда не должно быть просто ссылка.
Я согласен с остальным, я почти уверен, что вы больше не можете этого делать (особенно в Firefox). Вот сколько шпионских / рекламных программ было установлено в те времена. Вам придется занять позицию и просто сказать руководству, что это невозможно.
Активный элемент управления X - самый простой способ. Существует плагин для firefox, который позволяет размещать активные элементы управления X. Или вы можете просто написать плагин NS, чтобы справиться с этим.
Этот - старая статья о веб-развертывании исполняемых файлов. Я знаю, что это возможно с помощью Internet Explorer (из-за разрозненной группы разработчиков нам все еще приходится поддерживать некоторые из них). Я не знаю о последствиях Firefox.
Попробуйте этот JavaScript:
function executeCommands(inputparms)
{
// Instantiate the Shell object and invoke its execute method.
var oShell = new ActiveXObject("Shell.Application");
var commandtoRun = "c:\windows\Notepad.exe";
// Invoke the execute method.
oShell.ShellExecute(commandtoRun, commandParms, "", "open", "1");
}
Вам нужно будет соответствующим образом настроить параметры безопасности браузера, и это будет работать только в IE.
We're developing a site that will only run on the intranet, and computers with access to this intranet will have this executable installed.
Означает ли это, что EXE уже установлен на рабочем столе? Вы просто хотите запустить его с сайта?
Если это так, вы можете связать EXE с Тип содержимого MIME, и когда пользователь щелкнет его, он запустится.
Выберите тип содержимого и расширение файла для вашего EXE-имени, например:
CauseChaos.exe Associated with .chaos file extenstion Content Type will be: application/chaos
Свяжите расширение файла с вашим EXE через установку EXE. Я показываю это здесь, используя InnoSetup
[Registry]
Root: HKCR; Subkey: .chaos; ValueType: string; ValueData: CauseChaos; Flags: uninsdeletekey
Root: HKCR; Subkey: CauseChaos; ValueType: string; ValueData: CauseChaos Tool; Flags: uninsdeletekey
Root: HKCR; Subkey: CauseChaos\DefaultIcon; ValueType: string; ValueData: {app}\CauseChaos.exe,0; Flags: uninsdeletekey
Root: HKCR; Subkey: CauseChaos\shell\open\command; ValueType: string; ValueData: "{app}\CauseChaos.exe ""%1"""; Flags: uninsdeletekeyСвяжите тип содержимого MIME с расширением файла с помощью установки EXE.
[Registry] (continued...)
Root: HKCR; Subkey: HKCR\Mime\Database\Content Type\application/chaos; ValueType: string; ValueName: Extension; ValueData: .chaos; Flags: uninsdeletevalueЕсть идеи, как добавить типы MIME в Firefox? Я вижу, что могу редактировать существующий в настоящее время список типов MIME, но не нашел, как добавить новые.
Я добавил еще немного, надеюсь, отвечу на ваш вопрос.
Итак, я создал CauseChaos.exe, который просто запускает новый процесс (Блокнот) и завершает работу. Я создал сценарий InnoSetup, как указано выше. Он работает с пустым файлом foo.chaos. Затем я создаю веб-страницу, которая меняет тип содержимого ответа на «приложение / хаос», и ничего не происходит. Что мне не хватает?
Если вы дважды щелкните foo.chaos, ваше приложение запустится? Если да, то второй шаг вы сделали правильно ... и похоже, что ваша веб-страница неверна.
Понял, также добавил тип MIME в IIS. Спасибо.
Использование URL-адреса "file: /// c: / Program Files / myprogs / myprog.exe" в ссылке, используемой для работы с IE. Но я не пробовал это в течение долгого времени.
Я бы порекомендовал вышеописанный метод типа MIME или добавление специального префикса URI «chaos: // myparams», который обрабатывается этим исполняемым файлом.
Там было сделано. Типы MIME (принятый ответ на тот момент, когда я добавляю это) требуют большой настройки на клиенте и сервере. Это довольно небольшая работа, и вы получаете временные файлы и т. д.
Наше решение состояло в том, чтобы добавить наш собственный «Обработчик пользовательского протокола URL». По сути, добавьте URL-адрес типа x-our-intranet и сделайте свое корпоративное приложение обработчиком URL-адресов для него. Теперь любая ссылка запускает ваше корпоративное приложение, передавая «x-our-intrenet: foo» в качестве аргумента командной строки. Все, что для этого требуется, - это запись в реестре на стороне клиента, аналогичная типам MIME.
Я полностью понимаю, чего вы хотите. Все, что я читаю в Интернете, - это люди, упоминающие, что это серьезное нарушение безопасности и т. д. Однако я не думаю, что они понимают, почему вы хотите, чтобы это было реализовано, и я объясню, почему мне это нужно, и я работаю над решением этой проблемы и я подхожу очень близко.
У меня много разных пользовательских приложений, напр. Колл-центр и т. д. В настоящее время я работаю над изолированным рабочим столом, работающим в режиме киоска. Все, что пользователь увидит, - это синий экран с некоторой информацией о компьютере и значком IE. Моя цель - запустить Microsoft Office и некоторые внутренние клиент-серверные приложения с этой страницы. Он работает отлично, так как все еще есть, только мои пользователи не могут это видеть. Однако у меня такие же проблемы, как и у вас. Моя сеть очень безопасна с использованием MPLS, внутренних и внешних управляемых маршрутизаторов, межсетевых экранов / ASA и множества специалистов по безопасности. Кроме того, это ТОЛЬКО ДЛЯ ВНУТРЕННЕГО ИСПОЛЬЗОВАНИЯ. Так что, на мой взгляд, все в порядке. Итак, если я найду какое-то обходное решение для этого, я опубликую его.
Если вы хотите запустить приложение, которое у вас уже есть на компьютере, вы можете сделать это, зарегистрировавшись в реестре, и они вызовут его в HTML, как вы отправляете электронное письмо (mailto).
Итак, вам просто нужно создать реестр:
using Microsoft.Win32;
using System;
using System.IO;
using System.Linq;
namespace WMConsole
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Listening..");
//Gets the current location where the file is downloaded
var loc = System.Reflection.Assembly.GetExecutingAssembly().Location;
if (!Directory.Exists(@"D:\Console\"))
{
System.IO.Directory.CreateDirectory(@"D:\Console\");
}
//Creates the Downloaded file in the specified folder
if (!File.Exists(@"D:\Console\" + loc.Split('\\').Last()))
{
File.Move(loc, @"D:\Console\" + loc.Split('\\').Last());
}
var KeyTest = Registry.CurrentUser.OpenSubKey("Software", true).OpenSubKey("Classes", true);
RegistryKey key = KeyTest.CreateSubKey("alert");
key.SetValue("URL Protocol", "wnPing");
key.CreateSubKey(@"shell\open\command").SetValue("", @"D:\Console\WMConsole.exe %1");
}
}
}
И затем вы можете вызвать его в HTML через:
<a href = "alert:wmPing">Click to trigger</a>
Вот полная статья об этом: https://www.codeproject.com/Articles/1168356/Run-an-EXE-from-Web-Application
Как будто мой босс говорит: «Я не плачу тебе за это, я плачу тебе за то, чтобы ты делал это по-моему».