从网站启动可执行文件?

时间:2009-01-21 21:07:47

标签: windows web executable

我们正在开发一个只能在Intranet上运行的站点,并且可以访问此Intranet的计算机将安装此可执行文件。我们不能有任何“你想打开[filename] .exe吗?”提示。单击一个链接,程序就会开始运行。

我意识到让网站能够在客户端计算机上运行可执行文件是非常非常糟糕的,但是管理层拒绝对此做出让步。

计算机将安装带有Firefox 3的Windows(XP或更高版本)。

11 个答案:

答案 0 :(得分:11)

  

我们正在开发一个只能在Intranet上运行的站点,并且可以访问此Intranet的计算机将安装此可执行文件。

这是否意味着桌面上已经安装了EXE?你只想从网站上发布它?

如果是这样,您可以将EXE与MIME Content Type相关联,当用户点击它时,它就会启动。

为您的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

通过EXE安装将MIME内容类型与文件扩展名相关联。

[Registry] (continued...)
Root: HKCR; Subkey: HKCR\Mime\Database\Content Type\application/chaos; ValueType: string; ValueName: Extension; ValueData: .chaos; Flags: uninsdeletevalue

答案 1 :(得分:2)

去过那里。 MIME类型(我添加此时接受的答案)需要在客户端和服务器上进行大量配置。这是相当多的工作,你最终得到临时文件等。

我们的解决方案是添加我们自己的“自定义URL协议处理程序”。基本上,添加URL类型x-our-intranet并使您的公司应用程序成为它的URL处理程序。现在任何链接都将启动您的企业应用程序,将“x-our-intrenet:foo”作为命令行参数传递。它只需要一个客户端注册表项,类似于MIME类型。

答案 2 :(得分:1)

试试这个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。

答案 3 :(得分:0)

我可以想象这个工作的唯一方法是通过某种ActiveX控件来运行你的可执行文件,但我不知道Firefox有多可行。

这应该是你应该拒绝让步的东西之一,而不是管理层。

答案 4 :(得分:0)

我建议你看看Adobe Flex / Air,它的设计考虑了这个型号以及它打开的固有安全谷仓门。

答案 5 :(得分:0)

我同意其余的,我很确定你不能再这样做了(尤其是在Firefox中)。这是当天安装的间谍软件/广告软件程序的数量。你必须采取立场,告诉管理层这是不可能的。

答案 6 :(得分:0)

主动X控件是最简单的方法。有一个firefox插件,允许您托管活动的X控件。或者你可以写一个NS插件来处理这个问题。

答案 7 :(得分:0)

This是一篇关于可执行文件的Web部署的旧文章。我知道这可以使用Internet Explorer(因为我们支离破碎的开发团队,我们仍然需要支持其中一些)。我不知道firefox的含义。

答案 8 :(得分:0)

在用于IE的链接中使用“file:/// c:/ Program Files / myprogs / myprog.exe”URL。但是,我很久没有尝试过了。

我建议使用上面的MIME类型方法,或者添加由该可执行文件处理的特殊URI前缀“chaos:// myparams”。

答案 9 :(得分:0)

我完全理解你的想法。我在互联网上读到的只是人们提到这是一个很大的安全漏洞等...但是,我不认为他们理解你为什么要这个实现,我会解释为什么我需要这个,并正在努力解决这个问题和我越来越近了。

我有很多不同的用户应用程序,例如。呼叫中心等...... 我目前正在研究一种在Kiosk模式下运行的锁定桌面。所有用户都会看到一个带有一些计算机信息和IE图标的蓝屏。我的目标是从此页面运行Microsoft Office和一些内部客户端/服务器应用程序。它工作得很好,因为一切都还在那里,只是我的用户看不到它。但是,我遇到了和你一样的问题。我的网络使用MPLS,内部和外部管理路由器,防火墙/ ASA以及大量安全专业人员非常安全。此外,这仅限于INTERNAL。所以,在我看来,它完全可以。所以,如果我想出一些解决方法,我会发布它。

答案 10 :(得分:0)

如果要运行计算机上已有的应用程序,可以通过注册到注册表来完成,然后他们像发送电子邮件(mailto)一样用HTML调用它。

因此,您只需要创建注册表:

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