製品IDが*のWIXXMLファイルを生成するとします。また、各コンポーネントに対してGUID私は*を使用します。
<Product Id="*" Name="xxx" Language="1033" Version="1.0.0.0" Manufacturer="xxx" UpgradeCode="xxx">
舞台裏では、* WIXインストーラーをコンパイルするたびに一意のGUIDが回転しますか?バージョン1.0.0のマシンがインストールされているとします。次に、WIXインストーラーをバージョン1.0.1に再コンパイルします。 。
1.0.1をインストールしようとすると、WIXは1.0.0がすでにインストールされていることをどのように認識し、すべてのファイル/レジストリエントリを削除して1.0.1をインストールしますか?
* from GUIDを使用する必要がありますか、それともWIXXML構成に一意のID/GUIDを含める必要がありますか?
Product/@Id="*"
は、製品コードに十分な新しいGUIDをランダムに生成します。 Component/@Guid="*"
計算 a GUIDこれは、ターゲットパスが同じである限り同じままです。これは、コンポーネントルールに準拠するために必要です。
製品ID(ProductCode)は、インストーラーパッケージ内のすべてのものを特定の製品として一意に識別します。以前のバージョンがインストールされているかどうかを検索する場合、アップグレードコードに対して検索が実行されます。特定のアップグレードコードで見つかったすべてのアイテムについて、インストーラーは各製品コードを同じ製品の異なる化身として記録します。したがって、同じアップグレードコードの異なる製品コードは、異なる化身(同じ製品のバージョン)を識別すると言うことができます。
更新をMSP(Microsoftの用語では小規模更新またはマイナーアップグレード)として出荷する場合は、自動生成されたGUIDを使用しないでください。更新をMSI(メジャーアップグレード)としてのみ出荷する場合は、とにかく毎回製品コードを変更する必要があるため、自動生成は問題ありません。 -> http://msdn.Microsoft.com/en-us/library/aa370579.aspx を参照してください。
このクイックガイドライン はあなたを助けることができます。それがどのように機能するかをよりよく理解するために、その記事から参照されているMSDNリンクを必ず確認してください。
他のバージョンを新しいバージョンにリンクするのはアップグレードコードです。アップグレード機能を使用することを前提として、同じ製品でこれが変わることはありません。それ以外の場合は、各バージョンが異なる製品であるように見えます
Product要素のプロパティ「UpgradeCode」に値を設定する必要があります。これは一意である必要があり、セットアップの将来のすべてのビルドで同じである必要があります。アップグレードコードは、実行されているセットアップバージョンに応じて、インストールをアップグレードするかどうかを決定します。
すなわち:-
<Product Id="*" Name="My Application" Language="1033" Version="1.1.0" Manufacturer="Myself :p" UpgradeCode="{561DA858-5398-4B87-8F3A-8B8BB12650F6}">
静的アップグレードコードを維持しないと、同一のインストールが複製されます。
これは多少誤解されているかもしれませんが、コンポーネントとして新しいWiX Product.wxs
ファイルにインポートしていたファイルがたくさんありました。 Guid="*"
を使用してすべてのコンポーネントを作成した後、インストーラーをビルドしようとすると、WiXが各コンポーネントについて次のエラーを報告することを発見しました。
コンポーネント「AjaxControlToolkit.dll」には、パス「TARGETDIR\ajaxcontroltoolkit.dll」のキーファイルがあります。このパスは標準ディレクトリ(ProgramFilesFolderなど)の1つにルートされていないため、このコンポーネントは、自動生成されたGUIDを持つための基準に適合しません。
次のPowerShellスクリプトを使用して、各コンポーネントに新しいGUIDを割り当てました。このスクリプトはProduct.wxs
ファイルを直接変更するため、問題が発生した場合に備えてファイルのバックアップを保持する必要があることに注意してください。
(Get-Content Product.wxs) |
Foreach-Object { $guid = [guid]::NewGuid().ToString(); $_ -replace 'Guid="\*"',"Guid=""$guid"""} |
Out-File Product.wxs