Asp.net 如何防止下载被运行而不是保存在IE中

Asp.net 如何防止下载被运行而不是保存在IE中,asp.net,internet-explorer,Asp.net,Internet Explorer,当您在网页上创建指向要下载的可执行文件(如update.exe)的链接时,IE7为用户提供了“运行”或“保存”选项。我不希望用户运行他们应该下载的更新文件 是否可以在IE显示的对话框中禁用“保存”选项,甚至自动强制下载。下载行为内置于浏览器中。用户应该有选择权。这到底有什么区别?当用户选择“运行”时,文件将下载到临时位置并执行,就像用户已下载并手动运行一样。下载行为内置于浏览器中。用户应该有选择权。这到底有什么区别?当用户选择“运行”时,文件被下载到一个临时位置并执行,就像用户已经下载并手动运行

当您在网页上创建指向要下载的可执行文件(如update.exe)的链接时,IE7为用户提供了“运行”或“保存”选项。我不希望用户运行他们应该下载的更新文件


是否可以在IE显示的对话框中禁用“保存”选项,甚至自动强制下载。

下载行为内置于浏览器中。用户应该有选择权。这到底有什么区别?当用户选择“运行”时,文件将下载到临时位置并执行,就像用户已下载并手动运行一样。

下载行为内置于浏览器中。用户应该有选择权。这到底有什么区别?当用户选择“运行”时,文件被下载到一个临时位置并执行,就像用户已经下载并手动运行一样。

我只是猜测,但您可以强制内容类型标题字段设置为默认值之外的值。我看过“application/x-msdownload”,它可以做你想做的事情

我只是猜测,但是您可以强制内容类型标题字段设置为默认值之外的值。我看过“application/x-msdownload”,它可以做你想做的事情

EDIT:对不起,我以为这段代码可以自我解释。鉴于OP将其标记为ASP.NET,我认为我们处于ASP.NET的环境中

这应该放在链接到的代理文件中,而不是直接链接到.exe文件。然后代理文件发送.exe文件,并强制(试图说服)浏览器强制下载该文件,而不是直接运行该文件

HttpContext.Current.Response.Buffer = false;
HttpContext.Current.Response.ClearContent();
HttpContext.Current.Response.ClearHeaders();
HttpContext.Current.Response.AddHeader("Content-disposition", "attachment; filename=filename.exe");
HttpContext.Current.Response.AddHeader("Content-length", contentLength);
HttpContext.Current.Response.AddHeader("Content-Transfer-Encoding", "binary");
HttpContext.Current.Response.ContentType = "application/octet-stream";
HttpContext.Current.Response.TransmitFile(filePath);

编辑:对不起,我以为这段代码可以自我解释。鉴于OP将其标记为ASP.NET,我认为我们处于ASP.NET的环境中

这应该放在链接到的代理文件中,而不是直接链接到.exe文件。然后代理文件发送.exe文件,并强制(试图说服)浏览器强制下载该文件,而不是直接运行该文件

HttpContext.Current.Response.Buffer = false;
HttpContext.Current.Response.ClearContent();
HttpContext.Current.Response.ClearHeaders();
HttpContext.Current.Response.AddHeader("Content-disposition", "attachment; filename=filename.exe");
HttpContext.Current.Response.AddHeader("Content-length", contentLength);
HttpContext.Current.Response.AddHeader("Content-Transfer-Encoding", "binary");
HttpContext.Current.Response.ContentType = "application/octet-stream";
HttpContext.Current.Response.TransmitFile(filePath);

我能想到的唯一方法是通过组策略,如果它为此定义了一个选项的话。只有在您能够控制最终用户机器的情况下,这才是一个可行的解决方案,因此在加入intranet/域的环境中

作为标准,在IE/HTM/HTTP中没有任何东西可以用来控制呈现给最终用户的UI。你可以考虑一些替代的解决方案/工作方式:

  • 通过ActiveX交付可执行文件,ActiveX下载文件本身,从而强制保存文件
  • 通过引导包装器交付最终可执行文件,引导包装器的功能与选择的运行/保存无关,并执行最终可执行文件本身的下载

这两个选项几乎相同,但其中一个需要ActiveX,并且仅限于IE,而另一个不需要。我唯一能想到的方法是通过组策略,如果它为此定义了一个选项的话。只有在您能够控制最终用户机器的情况下,这才是一个可行的解决方案,因此在加入intranet/域的环境中

作为标准,在IE/HTM/HTTP中没有任何东西可以用来控制呈现给最终用户的UI。你可以考虑一些替代的解决方案/工作方式:

  • 通过ActiveX交付可执行文件,ActiveX下载文件本身,从而强制保存文件
  • 通过引导包装器交付最终可执行文件,引导包装器的功能与选择的运行/保存无关,并执行最终可执行文件本身的下载

这两个选项几乎相同,但其中一个需要ActiveX且仅限于IE,而另一个不需要。请尝试在您使用的编程语言中添加等效项:

setHeader(“内容处置”、“附件;文件名=…”>

当从服务器提供文件时,将其复制到该文件

编辑:将省略号(…)替换为要下载的文件


编辑2:为了澄清,不要直接服务器fred.png,而是使用fred.php,在该php文件中,生成自定义标题信息(包括内容处置)并将其与fred.png内容一起传递回客户端。

尝试添加您正在使用的编程语言中的等效内容:

setHeader(“内容处置”、“附件;文件名=…”>

当从服务器提供文件时,将其复制到该文件

编辑:将省略号(…)替换为要下载的文件


编辑2:为了澄清,不要直接服务器fred.png,而是使用fred.php,在该php文件中,生成自定义标题信息(包括内容处置)然后将该文件连同fred.png内容一起传递回客户端。

您可以将您提供的文件重命名为类似update.exe.safe的文件,但是您在让用户正确重命名该文件时遇到了问题,这样他们就可以双击该文件并发生一些事情。

您可以将您提供的文件重命名为类似update.exe.saf的文件e、 但是,让用户正确地重命名文件,以便他们可以双击它并发生一些事情,这是一个问题。

非技术性的方法是以所讨论的对话框图像的形式输入下载说明,在“保存”按钮周围有一个友好的圆圈,以及一些告诉用户单击“保存”按钮。这将一切留给用户,而不留给程序员。当试图实现类似的目标时,“1”问题是验证它是否真的有效。配置之间存在如此多的差异,以至于在所有情况下进行测试都变得不现实,在这种情况下,任何解决方案都无法保证有效,这意味着任何花费的时间/金钱都是浪费

此外,这意味着有一些非核心功能需要专业知识来维护