2009-05-27 29 views
27

Jest to wewnętrzna aplikacja internetowa, w której chcielibyśmy, aby strony WWW zawierały łącza do kilku narzędzi, które są Win32 EXE. Pliki EXE są nam zaufane i wyprodukowane. (nie przejmuj się, czy zapyta, czy można uruchomić lub zapisać). Próbowałem bezpośredniego łącza (np. C: \ notepad.exe), które działa tylko lokalnie. (To będzie udział w sieci). Próbowałem pliku: /// i nie działa. IE7 jest przeglądarką potrzebną.Jak uruchomić EXE ze strony internetowej (asp.net)

+0

prawdziwe odpowiedzi tutaj: http://stackoverflow.com/questions/3057576/launch-application-from-a-browser – pdem

Odpowiedz

29

Jak o czymś takim:

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

-1 - To by pobierało exe za każdym razem. Wymagałoby to każdorazowo pobrania i instalacji. Ale pytanie brzmi, jak uruchomić exe, który jest już na komputerze użytkownika. Całkowicie inny czajnik rybny. –

+6

@Larry: Myślę, że mylisz się w swojej interpretacji. W mojej opinii PO mówi, że pliki wykonywalne są przez nich produkowane (być może określony dział w organizacji) i muszą być dostępne do pobrania, a następnie do realizacji całej organizacji. – Cerebrus

+0

Jeśli chcesz uruchomić aplikację na pulpicie użytkownika po kliknięciu łącza lub przycisku na stronie internetowej, a Twoje aplikacje stacjonarne znajdują się w .NET, możesz skorzystać z opcji ClickOnce, aby wdrożyć aplikacje. ClickOnce ułatwi dystrybucję aplikacji w tym dworku. –

26

Można zobaczyć, jak iTunes robi to za pomocą Skrzypek śledzić działania, gdy korzystając z linku: http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=80028216

  1. Pobiera plik js
  2. na oknach: plik js określa, czy program iTunes został zainstalowany na komputerze lub nie: szuka komponentu przeglądarki ACTIVEX IE, albo wtyczki przeglądarki czy FF
  3. Jeśli iTunes jest zainstalowany następnie przeglądarka jest przekierowany do Adres URL ze specjalnym transportem: itms: // ...
  4. Przeglądarka wywołuje procedurę obsługi (dostarczoną przez program exe programu iTunes). Obejmuje to uruchomienie exe, jeśli jeszcze nie działa.
  5. iTunes exe wykorzystuje resztę specjalnego adresu URL, aby wyświetlić określoną stronę użytkownikowi.

Należy zauważyć, że exe, po zainstalowaniu, zainstalował obsługę protokołów URL dla "itms" transportu z przeglądarkami.

Nie jest to prosty projekt inżynieryjny, który można powielać, ale zdecydowanie można go wykonać. Jeśli to zrobisz, rozważ utworzenie odpowiedniego oprogramowania o otwartym kodzie źródłowym.

1

Mówisz, że masz problemy z wstawieniem do strony internetowej linku do pliku, który ma rozszerzenie .exe?

Jeśli tak, to cofnij się o jeden krok. Wyobraź sobie, że plik ma rozszerzenie .htm lub rozszerzenie .css. Jak możesz to ściągnąć? Jeśli jest to łącze statyczne, odpowiedź jest jasna: plik musi znajdować się w katalogu docroot aplikacji ASP.NET. Usługi IIS + ASP.NET obsługują wiele rodzajów treści: pliki .htm, pliki .css, pliki .js, pliki obrazów, domyślnie. Wszystkie te pliki znajdują się gdzieś pod docroot, domyślnie c: \ inetpub \ wwwroot, ale dla twojego webappa z pewnością jest coś innego. Fakt, że plik, który chcesz eksponować ma rozszerzenie .exe, nie zmienia podstawowych praw fizyki IIS. Exe musi żyć pod dowrotem. Element sieciowy może działać w przypadku niektórych przeglądarek.

Alternatywą oczywiście jest dynamiczne zapisywanie zawartości pliku bezpośrednio do Response.OutputStream. W ten sposób nie potrzebujesz, aby plik .exe był w twoim docroot, ale nie jest to bezpośredni link do pobrania. W tym scenariuszu plik może zostać pobrany za pomocą kliknięcia przycisku.

coś takiego:

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

Tak, bardzo dobra odpowiedź i dzięki za przypomnienie. Jednak EXE ładuje ustawienia konfiguracyjne z folderu ładowania, więc musiałbym przepisać, aby załadować z konfiguracji witryny sieci Web. – JoeJoe

+0

Alternatywą jest spakowanie rzeczywistej aplikacji wraz z jej plikiem konfiguracyjnym i wszystkim, czego potrzebuje, w samorozpakowującym archiwum ZIP (SFX), a następnie pobieranie THAT. SFX może określać polecenie execute-after-unpack, które może być poleceniem rozpakowanego pliku. Byłby wówczas w stanie normalnie załadować swój plik .config. Problem polega na tym, że przeciąłbyś przewód. Centralnej konfiguracji nie można zaktualizować. Po skopiowaniu do HD użytkownika, pozostanie tam. – Cheeso

+0

ps: DotNetZip jest (bezpłatną) biblioteką .NET, która umożliwia tworzenie samorozpakowujących się archiwów za pomocą polecenia execute-after-unpack. W ramach wykonywania strony ASP.NET można dynamicznie utworzyć SFX, a następnie pobrać go do HD użytkownika za pomocą metody TransmitFile(). – Cheeso

3

W ramach solution sugerował, że Larry K, rejestrując swój własny protokół może być możliwe rozwiązanie. Strona internetowa może zawierać prosty link do pobrania i zainstalowania aplikacji, która następnie rejestruje swój własny protokół w rejestrze systemu Windows.

Strona internetowa zawierałaby wtedy odsyłacze z parametrami, które spowodowałyby otwarcie programu registerd i przekazanie do niego parametrów podanych w odnośniku. Istnieje dobry opis jak to zrobić na MSDN

34

Zakłada exe jest gdzieś wiesz na komputerze użytkownika:

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

Dokumentacja: ActiveXObject, Exec Method (Windows Script Host).

+0

Działa to świetnie! Dla każdego, kto chce uruchomić aplikację z interfejsu użytkownika i może sobie pozwolić na ograniczenie dystrybucji do IE, jest to znacznie łatwiejsze niż budowanie interfejsu użytkownika w .NET lub Qt itp. Doskonałe również do pisania interfejsów użytkownika w celu testowania EXE. –

+2

Jak możemy uruchomić Chrome w powyższy sposób? – Ganesh

+1

'ActiveXObject' działał tylko dla IE – ashkufaraz

1

jeśli aplikacje są C#, możesz użyć ClickOnce deployment, co jest dobrym rozwiązaniem, jeśli nie możesz zagwarantować, że użytkownik będzie miał aplikację, jednak będziesz musiał ponownie zbudować aplikacje z opcjami wdrażania i pobrać niektóre kod z każdego projektu. Można także użyć Javascript.

Możesz też zarejestrować aplikację pod numerem handle a new web protocol, którą możesz zdefiniować. Może to być także protokół "wyboru aplikacji", więc za każdym razem, gdy kliknie się aplikacja, będzie ona łączyła się ze stroną w nowym protokole, cała obsługa tego protokołu jest następnie przekazywana do twojej "aplikacji selekcyjnej", która używa argumentów do wyszukiwania i uruchamiania aplikacja na komputerze klienta.

HTH

7

W oknach, określony protokół aplikacji może zostać zarejestrowany w Rejestrze. W tym msdn doc wyświetlono rejestrację aplikacji na schemacie URI.

Na przykład należy uruchomić plik wykonywalny "alert.exe". Poniższy element można zarejestrować.

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" 

Następnie można napisać html przetestować

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

<body> 
    <a href="alert:" >alert</a> 
<body> 
Powiązane problemy