正在从网站发布可执行文件吗?

问题描述 投票:4回答:11

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

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

机器将具有Windows(XP或更高版本)和Firefox 3。

windows web executable
11个回答
11
投票

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

这是否意味着EXE已安装在桌面上?您只想从网站启动它?

如果是这样,您可以将EXE与MIME Content Type关联,并且当用户单击它时,它将启动。

为您的EXE名称选择一个内容类型和文件扩展名,例如:

CauseChaos.exe与.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

0
投票

我完全了解您的需求。我在互联网上阅读的所有内容都提到了这是一个重大的安全漏洞等。但是,我想他们不会理解您为什么要实施此功能,我将解释为什么我需要此功能,并正在努力解决此问题,越来越近。

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


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


2
投票

以前在那里做过。 MIME类型(在我添加此内容时即为可接受的答案)需要在客户端和服务器上进行大量配置。这需要大量工作,最终会得到临时文件等。

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


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中有效。


0
投票

[我唯一能想到的方法是通过某种ActiveX控件来运行您的可执行文件,但我不知道Firefox的可行性。

这应该是-you-应当拒绝对此而不是管理层的事情之一。


0
投票

我建议您看一下Adobe Flex / Air,它的设计考虑了这一模型,并打开了固有的安全谷仓门。


0
投票

我同意其余的内容,我很确定您将无法再执行此操作(尤其是在Firefox中)。这就是一天中安装了许多间谍软件/广告软件程序。您将不得不站起来,只是告诉管理层这是不可能的。


0
投票

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


0
投票

This是有关可执行文件的Web部署的旧文章。我知道使用Internet Explorer是可行的(由于我们分散的开发团队,我们仍然必须支持其中的某些功能)。我不了解firefox的含义。


0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.