这是一个内部Web应用程序,我们希望Web页面包含指向Win32 EXE的多个实用程序的链接。 EXE是我们信赖和生产的。 (不在乎它是否可以运行或保存)。我尝试了仅在本地工作的直接链接(例如C:\ notepad.exe)。 (这将是网络上的一部分)。尝试过File:///但没有用。 IE7是需要的浏览器。
答案 0 :(得分:35)
这假设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>
答案 1 :(得分:29)
如下:
<a href="\\DangerServer\Downloads\MyVirusArchive.exe"
type="application/octet-stream">Don't download this file!</a>
答案 2 :(得分:26)
使用链接时,您可以通过使用Fiddler跟踪操作来了解iTunes的用途: http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=80028216
请注意,安装时,exe会为浏览器中的“itms”传输安装URL协议处理程序。
不是一个复制的简单工程项目,但绝对可行。如果您继续这样做,请考虑使相关软件开源。
答案 3 :(得分:10)
在Windows中,应用程序的指定协议可以在Registry中注册。 在此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>
答案 4 :(得分:4)
作为Larry K建议的solution的一部分,注册自己的协议可能是一种可能的解决方案。 该网页可以包含一个简单的链接来下载和安装该应用程序 - 然后该应用程序将在Windows注册表中注册自己的协议。
然后,网页将包含带有参数的链接,这些参数将导致已注册的程序被打开,并且链接中指定的任何参数将被传递给它。 有关如何在MSDN
上执行此操作的详细说明答案 5 :(得分:1)
你试过UNC share吗?
\\server\share\foo.exe
答案 6 :(得分:1)
您是说您在网页中插入指向恰好具有.exe扩展名的文件的链接时遇到问题?
如果是这种情况,那就退后一步。想象一下,该文件具有.htm扩展名或.css扩展名。你怎么能下载?如果它是静态链接,那么答案很明确:该文件需要位于ASP.NET应用程序的docroot中。 IIS + ASP.NET提供多种内容:.htm文件,.css文件,.js文件,图像文件,隐式。所有这些文件都在docroot下,默认情况下是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();
答案 7 :(得分:1)
如果应用程序是C#,您可以使用ClickOnce deployment,如果您不能保证用户将拥有该应用程序,这是一个不错的选择,但是您必须使用部署选项重新构建应用程序并从每个项目中获取一些样板代码。
您也可以使用Javascript。
或者您可以将申请注册到您可以定义的handle a new web protocol。这也可能是一个“应用程序选择”协议,因此每次点击一个应用程序它将链接到新协议上的页面,然后所有处理此协议的内容都会传递给您的“选择应用程序”,该应用程序使用参数来查找和启动客户端PC上的应用程序。
HTH