3

すべての MSI インストールで、検証中に同じ ICE81 の「失敗」が表示されますが、原因がわかりません。検証の実行に使用する MSI エディター (MS Orca、Flexera InstallShield、InstEdit.com) に関係なく発生します。すべてのインストール パッケージは、正しい場所 (MSI ファイルと同じフォルダー) にある外部 CAB ファイルを使用し、すべての CAB ファイルは、MSI ファイルが署名されているのと同じデジタル署名で署名されています (および Media、MsiDigitalCertificate、MsiDigitalSignature、および MsiPatchCertificate テーブルは正しく作成されているように見えます)。

ICE81 Failure ICE Internal Error 1867. API Returned: 1615.     MSIEditor_full_path\darice.cub
ICE81 Failure Error 2228: C:\Users\my_user_name\AppData\Local\Temp\random_tmp_filename.tmp, feature_name, SELECT `DiskId`, `Cabinet` FROM `Media` WHERE (`DiskId` = cab_name.cab)     MSIEditor\darice.cub

何か案は?

4

2 に答える 2

3

エラーはERROR_BAD_QUERY_SYNTAX、「SQL クエリ構文が無効であるか、サポートされていません」という意味です。そのため、ICE が MSI を検証するために作成している内部 SQL クエリが失敗しています。クエリを見ると、失敗する可能性のある唯一の部分は query:WHERE DiskId=cab_name.cabです。

問題を詳しく見るcab_name.cabと、これは文字列であり、一重引用符で囲む必要があることを意味します。つまり、次のようになります'cab_name.cab'。では、なぜ ICE は文字列を正しく引用しなかったのでしょうか? さて、それが答えです。

テーブルのDiskId列はMedia数値である必要があります。どういうわけか、代わりに数字(のような)が期待されるテーブルcab_name.cabの最初の列に挿入されました。ICE は数字を想定しており、数字は引用符で囲まれるべきではないため、 を引用符で囲みません。Media1DiskId

修正するにDiskIdは、表の (最初の) 列をMedia正の数 (I like 1) に変更し、そのcab_name.cab値をCabinet(4 番目の) 列に入れます。

どのツールで整数列に文字列を入れることができるかはわかりませんが、あらゆる種類の機能が機能しないため、バグを送る可能性があります。:)

于 2013-05-02T20:19:51.390 に答える