![如果从互联网上下载,Windows 控制台 .exe 将无法运行](https://linux22.com/image/512614/%E5%A6%82%E6%9E%9C%E4%BB%8E%E4%BA%92%E8%81%94%E7%BD%91%E4%B8%8A%E4%B8%8B%E8%BD%BD%EF%BC%8CWindows%20%E6%8E%A7%E5%88%B6%E5%8F%B0%20.exe%20%E5%B0%86%E6%97%A0%E6%B3%95%E8%BF%90%E8%A1%8C.png)
我在 Windows Server 2003 上有一个夜间作业,它通过从 Amazon S3 下载其 .exe 来自动更新自身。我注意到,当它执行下载并尝试运行新下载的 .exe 时,它会立即返回到命令行,而实际上不会运行任何内容。
我可以通过将新版本的代码直接粘贴在服务器上并观察其成功执行,然后将其上传到“更新”服务器,运行引导程序,然后运行.exe并观察其执行失败来验证这一点。
我只能假设这是由于 Windows 保护我免于运行来自其受信任区域之外的代码。如何配置它以允许执行来自此特定外部位置的代码?
谢谢!
答案1
Windows 通过使用文件流来跟踪文件是否已从互联网下载(或甚至从 zip 文件解压)。有一个与 .exe 关联的流,它有效地表示“我来自 www.example.com”。
如果要为该文件禁用它,并且由于它无论如何都是批处理作业,则可以使用以下命令删除该流
http://www.microsoft.com/technet/sysinternals/utilities/Streams.mspx
高血压
答案2
也许可以通过将您的 S3 URL 添加到您的信任区域来做到这一点?
答案3
尝试以下操作:转到新下载的文件,右键单击并调出属性,检查是否有“解除阻止”按钮。如果您下载了可执行文件,则需要明确允许其运行。我不确定如何在脚本中执行此操作,因此这不会解决您的问题,但可能会让您更接近问题。
答案4
如果您想禁用区域检查,请设置环境变量 SEE_MASK_NOZONECHECKS=1,但不要这样做。通过此脚本运行您的可执行文件:
set oShell= CreateObject("Wscript.Shell")
set oEnv = oShell.Environment("PROCESS")
oEnv("SEE_MASK_NOZONECHECKS") = 1
oShell.Run "c:\myexecutablepath\myexecutable.exe",0,True
oEnv.Remove("SEE_MASK_NOZONECHECKS")