web-dev-qa-db-ja.com

Webページ(asp.net)からEXEを起動する方法

これは、WebページにWin32 EXEであるいくつかのユーティリティへのリンクを含める内部Webアプリケーションです。 EXEは私たちによって信頼され、作成されています。 (実行するか保存するかどうかを尋ねるかどうかは気にしません)。ローカルでのみ動作するダイレクトリンク(C:\ notepad.exeなど)を試しました。 (これはネットワーク上の共有になります)。 File:///を試しましたが、動作しませんでした。 IE7は必要なブラウザです。

27
JoeJoe

次のようなものはどうですか:

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

これは、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>

ドキュメント: ActiveXObjectExecメソッド(Windowsスクリプトホスト)

35
JLopez

リンクの使用時にアクションをフォローするためにFiddlerを使用することで、iTunesがどのようにそれを行うかを見ることができます: http://phobos.Apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=80028216

  1. Jsファイルをダウンロードします
  2. Windowsの場合:jsファイルは、iTunesがコンピューターにインストールされているかどうかを判断します。IEの場合はactiveXブラウザーコンポーネント、FFの場合はブラウザープラグインを検索します
  3. ITunesがインストールされている場合、ブラウザは特別なトランスポートを使用してURLにリダイレクトされます:itms:// ...
  4. ブラウザはハンドラーを呼び出します(iTunes exeによって提供されます)。これには、exeがまだ実行されていない場合の実行が含まれます。
  5. iTunes exeは残りの特別なURLを使用して、特定のページをユーザーに表示します。

Exeをインストールすると、ブラウザで「itms」トランスポート用のURLプロトコルハンドラーがインストールされます。

複製する単純なエンジニアリングプロジェクトではありませんが、間違いなく実行可能です。これを続行する場合は、関連するソフトウェアをオープンソースにすることを検討してください。

26
Larry K

Windowsでは、アプリケーションに指定されたプロトコルをレジストリに登録できます。この中の 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>
10
chenatu

Larry Kが示唆した solution の一部として、独自のプロトコルを登録することが解決策になる可能性があります。 Webページには、アプリケーションをダウンロードしてインストールするための簡単なリンクを含めることができます。これにより、独自のプロトコルがWindowsレジストリに登録されます。

Webページには、登録されたプログラムが開かれたり、リンクで指定されたパラメーターが渡されたりするパラメーターを持つリンクが含まれます。 [〜#〜] msdn [〜#〜] でこれを行う方法の良い説明があります。

4
user278623

アプリケーションがC#の場合、 ClickOnce deployment を使用できます。これは、ユーザーがアプリを使用することを保証できない場合に適したオプションですが、展開を使用してアプリを再構築する必要がありますオプションと各プロジェクトからいくつかの定型コードを取得します。

Javascript を使用することもできます。

または、アプリケーションを 新しいWebプロトコルを処理する に登録できます。これは「アプリ選択」プロトコルでもある可能性があるため、アプリがクリックされるたびに新しいプロトコルのページにリンクし、このプロトコルのすべての処理は引数を使用して検索および起動する「選択アプリ」に渡されますクライアントPC上のアプリ。

HTH

1
Dead.Rabit

拡張子が.exeのファイルへのリンクをWebページに挿入するのに問題があると言っていますか?

その場合は、1ステップ戻ります。ファイルの拡張子が.htmまたは.cssであると想像してください。どうすればダウンロード可能にできますか?静的リンクの場合、答えは明らかです。ファイルは、ASP.NETアプリのdocrootにある必要があります。 IIS + ASP.NETは、.htmファイル、.cssファイル、.jsファイル、画像ファイル、暗黙的に。これらすべてのファイルはどこかにあります。デフォルトでは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();
1
Cheeso

NCシェア を試しましたか?

\\server\share\foo.exe

1
Andrew Hare