我们有一个.NET可执行文件,我们在Web服务器上托管。 Web服务器的域在用户的IE上设置为“可信站点”。
当用户左键单击可执行文件的链接时,它会出现错误:“Microsoft IE Execute shell遇到问题并需要关闭”。根据我的阅读,这是因为IE正在尝试使用ieexec.exe直接执行文件。
用户应该得到一个带有安全警告的弹出框,询问他们是否要下载.exe,按钮“运行”“保存”“取消”。不是一个神秘的安全例外。解决方法是右键单击并单击“目标另存为...”。
当然,这只会在IE中爆发,而不是Firefox或Chrome。
如何编译.NET可执行文件以绕过此ieexec.exe并强制文件下载提示?
答案 0 :(得分:4)
在不知道您可以访问哪种特定的.NET技术的情况下,很难确定答案,但是,您可能会觉得这很有帮助。
如果您在ASP.NET中提供内容,则可以设置内容处置和内容类型以鼓励从浏览器进行正确处理:
Response.AppendHeader("content-disposition", "attachment; filename=myexe.exe");
Response.ContentType = "application/octet-stream";
以下是在ASP.NET中控制HttpResonse的旧的但合理适用的示例:
答案 1 :(得分:-1)
可以通过在你的锚点/输入按钮上添加onclick
事件处理程序或用于下载.exe
添加此JavaScript:
onclick=javascript:setTimeout(window.location=[File location], 1000);
答案 2 :(得分:-2)
这可能不是最简单的解决方案,但我相信它应该可行:将文件重定向到脚本,并让该脚本设置content-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正确地尊重标题,但这样你告诉它下载有问题的文件。