在IE for .NET可执行文件中强制文件下载提示?

时间:2010-08-26 22:06:28

标签: .net security internet-explorer exe

我们有一个.NET可执行文件,我们在Web服务器上托管。 Web服务器的域在用户的IE上设置为“可信站点”。

当用户左键单击可执行文件的链接时,它会出现错误:“Microsoft IE Execute shell遇到问题并需要关闭”。根据我的阅读,这是因为IE正在尝试使用ieexec.exe直接执行文件。

用户应该得到一个带有安全警告的弹出框,询问他们是否要下载.exe,按钮“运行”“保存”“取消”。不是一个神秘的安全例外。解决方法是右键单击并单击“目标另存为...”。

当然,这只会在IE中爆发,而不是Firefox或Chrome。

如何编译.NET可执行文件以绕过此ieexec.exe并强制文件下载提示?

3 个答案:

答案 0 :(得分:4)

在不知道您可以访问哪种特定的.NET技术的情况下,很难确定答案,但是,您可能会觉得这很有帮助。

如果您在ASP.NET中提供内容,则可以设置内容处置和内容类型以鼓励从浏览器进行正确处理:

Response.AppendHeader("content-disposition", "attachment; filename=myexe.exe");
Response.ContentType = "application/octet-stream";

以下是在ASP.NET中控制HttpResonse的旧的但合理适用的示例:

http://aspalliance.com/259

答案 1 :(得分:-1)

可以通过在你的锚点/输入按钮上添加onclick事件处理程序或用于下载.exe

的任何控件来实现。

添加此JavaScript:

onclick=javascript:setTimeout(window.location=[File location], 1000);

答案 2 :(得分:-2)

这可能不是最简单的解决方案,但我相信它应该可行:将文件重定向到脚本,并让该脚本设置co​​ntent-disposition标头并输出文件。如果不清楚,我将在下面逐步提供。在逐步的过程中,我将假设在php环境中使用apache,但在任何体面的环境中都应该这样做。

首先,我们将在您的Web服务器上设置mod_rewrite规则,以便将下载传递给php文件:

<强>的.htaccess

RewriteEngine On
RewriteRule ^file.exe$ file.php

然后,我们将使php文件设置适当的标题,包含content-disposition标头并包含该文件。

<强> file.php

<?php

header("Content-disposition: attachment; filename=file.exe");
header("Content-type: application/octet-stream");

echo file_get_contents('file.exe');
?>

这应该告诉浏览器除了下载之外不要考虑任何其他事情。我没有尝试过,如果IE正确地尊重标题,但这样你告诉它下载有问题的文件。