我正在运行 Windows 7,当我尝试运行批处理文件时,它显示“无法验证发布者。您确定要运行此软件吗?”
因此,当我尝试使用我的代码签名证书对其进行签名时,它显示“SignTool 错误:无法签名此文件格式,因为它无法识别。”
所以我陷入了进退两难的境地。有没有什么办法可以消除这两种消息?
答案1
如果我从网络位置运行批处理文件(或其他可执行文件),也会收到类似的消息。如果是这种情况,您可能需要考虑将其移动到本地驱动器。另一种方法是使用本地驱动器上的单独批处理文件来启动网络上的批处理文件。启动批处理文件中只需包含一行:
@call \\network\folder\batch.bat
Windows 不会拒绝本地文件,一旦该文件运行,它就可以毫无问题地调用网络版本。
答案2
您看到的是 Windows 在您尝试打开任何已下载文件时提供的一般提示。当您下载文件时,它会被标记一个标志,表明它来自互联网,因此具有潜在危险。当您尝试运行此类文件时,Windows 会检查它是否具有有效签名,以确定它是否可以信任。
你可以做的是使用以下方法从文件中删除标志:解除封锁按钮,此后,无论何时尝试运行它,Windows 都不会再打扰你:
问题在于批处理文件是可以执行的文本文件。虽然可以对文本文件进行签名,但最终会将一堆二进制数据附加到文件中,这对于批处理文件来说是坏的,因为它是乱码,并且会在命令解释器尝试执行它时导致问题。注释掉签名也不起作用,因为签名会损坏。
因此,签署批处理文件是行不通的。
您需要做的是弄清楚为什么系统在尝试运行它时会提示您。默认情况下,Windows 在运行批处理文件之前不会询问,因此您必须有一个特殊策略或安全程序阻止它。检查您的安全程序,看看是否有可以禁用或添加排除的验证设置。
还要检查批处理文件的内容以查看它是否正在运行未经签名的可执行文件(不过,默认情况下,除非下载或需要提升权限,否则 Windows 不会提示输入可执行文件,因此请检查您的设置)。
答案3
您没有对批处理文件进行签名。听起来您的批处理文件正在调用其他需要签名的内容。
编辑:既然您已经发布了批处理文件,我们可以看出这是由于网络位置造成的。或者,有时如果您只是复制来自网络位置的文件。在后一种情况下,这是因为 Windows 已通过备用数据流将文件标记为位于其他 Internet 区域。您可以通过以下两种方式之一来解决这个问题:
- 更改 Internet Explorer 中的安全区域,以适应 Intranet 区域。
- 使用 type 命令销毁文件的备用数据流。(Sysinternals 的 streams.exe 也可以执行此操作。)
type thefile.bat > %temp%\newfile.bat & type %temp%\newfile.bat > thefile.bat
答案4
您也可以将.bat 文件转换为 PowerShell 脚本,signtool 支持对这些文件进行签名。