4

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

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

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

4

11 回答 11

11

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

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

如果是这样,您可以将 EXE 与MIME 内容类型相关联,当用户单击它时,它将启动。

为您的 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
于 2009-01-21T21:24:28.497 回答
2

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

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

于 2009-01-23T13:44:26.957 回答
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。

于 2009-01-21T21:19:16.230 回答
0

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

这应该是你应该拒绝让步的事情之一,而不是管理。

于 2009-01-21T21:10:39.367 回答
0

我建议您看一下Adob​​e Flex / Air,它的设计考虑了这种模型以及它打开的固有安全谷仓门。

于 2009-01-21T21:13:34.650 回答
0

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

于 2009-01-21T21:16:26.140 回答
0

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

于 2009-01-21T21:16:43.783 回答
0

是一篇关于可执行文件的 Web 部署的旧文章。我知道使用 Internet Explorer 可以做到这一点(由于我们分散的开发团队,我们仍然必须支持其中的一些)。我不知道Firefox的影响。

于 2009-01-21T21:16:56.937 回答
0

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

我会推荐上面的 MIME 类型方法或添加由该可执行文件处理的特殊 URI 前缀“chaos://myparams”。

于 2009-01-21T23:18:56.907 回答
0

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

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

于 2009-03-26T23:45:27.880 回答
0

如果您想运行计算机上已有的应用程序,您可以通过注册到注册表来实现,然后他们用 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

于 2020-01-15T15:01:50.197 回答