Windows 7を実行していますが、バッチファイルを実行しようとすると、「発行元を確認できませんでした。このソフトウェアを実行してもよろしいですか?」と表示されます。
そのため、コード署名証明書で署名しようとすると、「SignTool Error:このファイル形式は認識されないため、署名できません」と表示されます。
だから私は岩と難しい場所の間に立ち往生しています。どちらかのメッセージを排除する方法はありますか?
Windows 7を実行していますが、バッチファイルを実行しようとすると、「発行元を確認できませんでした。このソフトウェアを実行してもよろしいですか?」と表示されます。
そのため、コード署名証明書で署名しようとすると、「SignTool Error:このファイル形式は認識されないため、署名できません」と表示されます。
だから私は岩と難しい場所の間に立ち往生しています。どちらかのメッセージを排除する方法はありますか?
回答:
ネットワークの場所からバッチファイル(または他の実行可能ファイル)を実行すると、同様のメッセージが表示されます。この場合は、ローカルドライブに移動することを検討してください。もう1つの方法は、ローカルドライブの個別のバッチファイルを使用して、ネットワーク上のものを起動することです。起動するバッチファイルに必要なのは1行だけです。
@call \\network\folder\batch.bat
Windowsはローカルファイルを処理しません。そのファイルが実行されると、問題なくネットワークバージョンを呼び出すことができます。
E:
ネットワークマップドライブですか?
バッチファイルには署名しません。バッチファイルが署名する必要のある何かを呼び出しているようです。
編集:バッチファイルを投稿したので、ネットワークの場所が原因であることがわかります。または、単にネットワーク上の場所からファイルをコピーしただけの場合にも発生します。後者の場合、Windowsが代替データストリームを介してファイルを他のインターネットゾーンにあるようにタグ付けしているためです。これを回避するには、次の2つの方法があります。
type thefile.bat > %temp%\newfile.bat & type %temp%\newfile.bat > thefile.bat
表示されているのは、ダウンロードされたファイルをいつでも開こうとしたときにWindowsから表示される一般的なプロンプトです。何が起こるかというと、ファイルをダウンロードすると、ファイルがインターネットからのものであることを示すフラグが付けられているため、潜在的に危険であるということです。このようなファイルを実行しようとすると、Windowsは、信頼できるかどうかを判断するために、有効な署名があるかどうかを確認します。
あなたができることは、ファイルのプロパティの「ブロック解除」ボタンを使用してファイルからフラグを取り除くことです。その後、Windowsはそれを実行しようとするときはいつでもあなたを放っておいてくれます。
問題は、バッチファイルが実行可能なテキストファイルであることです。テキストファイルに署名することは可能ですが、ファイルにバイナリデータの束を追加することになります。これは、バッチファイルの場合、意味不明であり、コマンドインタープリターが実行しようとすると問題が発生するため、問題になります。署名が破損するため、署名をコメント化しても機能しません。
したがって、バッチファイルへの署名は機能しません。
あなたがする必要があるのは、それを実行しようとするとシステムがあなたにプロンプトを出す理由を理解することです。デフォルトでは、Windowsはバッチファイルを実行する前に要求しないので、特別なポリシーまたはセキュリティプログラムでブロックする必要があります。セキュリティプログラムをチェックして、無効化または除外の追加が可能な検証設定があるかどうかを確認します。
また、バッチファイルの内容をチェックして、署名されていない実行可能ファイルが実行されているかどうかを確認します(ただし、デフォルトでは、Windowsはダウンロードまたは実行権限の昇格が必要でない限り、実行可能ファイルの入力を要求しません。設定を確認してください)。
goto :eof
署名の前にを挿入することもできますが、その場合、ファイルのハッシュが変更されて署名が無効になり、ファイルが破損/安全ではなくなります。署名する前にファイルの最後にその行を置くこともできますが、うまくいくはずです。試してみる興味深い実験…
.batファイルをPowerShellスクリプトに変換することもできます。signtoolはこれらのファイルへの署名をサポートしています。