3

WiX 3.6 に移行し、書き込み機能を利用して、特定の VC++ ランタイムなどの必要な部分の潜在的なダウンロード/インストールを容易にしようとしています。

私はいくつかの「test.wxs」から始めました。以下を参照してください。candle.exe には問題ありません。

$ candle test.wxs
Windows Installer Xml Compiler version 3.6.3303.0
Copyright (C) Outercurve Foundation. All rights reserved.

test.wxs

しかし、light.exe はそれをチョークします。

$ light test.wixobj -ext WixBalExtension
Windows Installer Xml Linker version 3.6.3303.0
Copyright (C) Outercurve Foundation. All rights reserved.

light.exe : error LGHT0103 : The system cannot find the file '' with type ''.

誰かがこの(やや不可解な)エラーメッセージを手伝ってくれますか?

ローカル ファイルを使用した修正版は正常に動作するため、RemotePayload に関連しているようです。ただし、パッケージ サイズを節約し、必要に応じてダウンロードをターゲット マシンに残したいと考えています。

「test.wxs」の全内容は次のとおりです。

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <Bundle Version="1.0.0.0" 
            UpgradeCode="e349236d-6638-48c5-8d8b-db47682b9aeb">
        <BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense" />
        <Chain>
            <!-- C++ Runtime -->
            <ExePackage Name="vcredist_x64.exe"
                        DownloadUrl="http://www.microsoft.com/en-us/download/confirmation.aspx?id=2092" >
                <RemotePayload CertificatePublicKey="F321408E7C51F8544B98E517D76A8334052E26E8" 
                               CertificateThumbprint="D57FAC60F1A8D34877AEB350E83F46F6EFC9E5F1" 
                               Description="Microsoft Visual C++ 2008 Redistributable Setup" 
                               Hash="13674C43652B941DAFD2049989AFCE63CB7C517B" 
                               ProductName="Microsoft Visual C++ 2008 Redistributable" 
                               Size="4961800" 
                               Version="9.0.30729.17" />
            </ExePackage>
        </Chain>
    </Bundle>
</Wix> 
4

3 に答える 3

4

私自身の質問に対する部分的な回答: 属性 Compressed="no" を ExePackage 要素に追加すると、エラー メッセージが消えます。

「圧縮」属性に関するドキュメントには、「パッケージ ペイロードをコンテナに埋め込むか、外部ペイロードとして残すか」と記載されており、その値は「はい」、「いいえ」、または「デフォルト」のいずれかです。

「yes」または「default」を使用すると、エラー メッセージが表示されます。「いいえ」は使用しません。

于 2013-03-06T07:25:55.810 に答える
2

別のパッケージ (.NET フレームワーク) と Wix 3.7 で同じ問題が発生しました。Wix ソース コードを使用して、テストする適切なパッケージ名とレジストリ キーを見つけ、関連するビットをインストーラーに貼り付けました。次に、ファイルをダウンロードする代わりにインストーラーに埋め込みたかったので、意図的に 'Compressed="yes"' を設定しました。

このメーリング リスト スレッドに投稿されたのと同様のレポートがありました。

Benjamin Mayrargue: ExePackage に DownloadUrl があり、Compressed が yes に設定されている場合、light はエラー LGHT0103 で失敗しました: The system cannot find the file '' with type ''.

Markus Wehrle: わかりました。ExePackage を bootstrapper.exe (compressed="yes") に圧縮したい場合は、"Source" 属性を使用して指定する必要があります。コンパイル時にブーストラップに圧縮されるため、DownloadUrl を宣言してはなりません。compress="no" を指定すると、ブーストラップのインストール中に ExePackage が DownloadUrl からダウンロードされます。

Rob Mensching: 具体的には、ExePackage 要素で RemotePayload 要素と Compressed='yes' を一緒に使用することはできません。それは意味がありません。ここでのバグは、コンパイラがそれを示すエラー メッセージを表示しなかったことです。

そうです、問題に対する同じ修正を正しく特定しました。

ちなみに属性は「Compressedパッケージのペイロードをコンテナに埋め込むか、外部ペイロードとして残すか」を指定します。その外部ペイロードはRemotePayload、ディスク上のファイルまたは別のファイルのいずれかですが、一般的なセットアップは、すべてのリソースが埋め込まれた単一のブートローダーです。

Compression 属性を使用yesすると、ユーザーのインターネット接続が低速または存在しない場合でも、アプリケーションと VC++ ランタイムをインストールできます。DownloadUrlとをインストーラーから削除し、次のようRemotePayloadに置き換えます。Compressed="yes"

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
  <Bundle Version="1.0.0.0"
          UpgradeCode="e349236d-6638-48c5-8d8b-db47682b9aeb">
    <BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense" />
    <Chain>
      <!-- C++ Runtime -->
      <ExePackage Name="vcredist_x64.exe"
                  Compressed="yes">
      </ExePackage>
    </Chain>
  </Bundle>
</Wix>

次に、vcredist_x64.exe ファイルをダウンロードし (自分で 1 回)、test.wxs ファイルの隣に配置します。別の場所に配置する場合は、「名前」を調整します。これにより、作成されるブートストラップのサイズが vcredist_x64.exe のサイズほど大きくなるため、ユーザーがインストーラーをダウンロードする場合はお勧めできません。

于 2013-07-18T18:17:03.227 に答える
0

私の場合、ファイル名/ディレクトリ パスが 255 文字を超えていたため、エラーがスローされました。ファイルは存在しますが、コンパイラはファイルが存在しないと述べています。

于 2016-09-22T02:58:32.463 に答える