はい、しかし、あなたのMSIは、メジャーアップグレードされるべきでないことを心に留めておくか、それはあなたが望むものでない限り、彼らは(以前のバージョンを削除します。おそらくあなたはサイド・バイ・サイドを望みますフォルダを同時にインストールすることができます)。
最初に、コンポーネントGUIDをハードコードする必要はありません。同じコンポーネントのGUIDを別のフォルダに移動することがサポートされていますが、アップデートでは多くの問題が発生し、アンインストールは避けてください。また、メンテナンスするのも苦痛なので、コンポーネントには自動GUIDを使用してください。
はそうのようなディレクトリの作成を作成します(あなたはPRODUCTVERSION変数に渡すと仮定し):
<?define ProductName="MyProduct"?>
<?ifndef ProductVersion?>
<?define ProductVersion=1.0.0?>
<?endif?>
<Product Name="$(var.ProductName)" Version="$(var.ProductVersion)" ...>
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder" Name="Program Files">
<Directory Id="INSTALLDIR" Name="$(var.ProductName)">
<Directory Id="VersionDir" Name="$(var.ProductVersion)"/>
</Directory>
</Directory>
</Directory>
</Product>
これは、ディレクトリテーブルのちょうどサンプルスニペットです。私はINSTALLDIRをルート製品パスとして定義して、バージョンごとのディレクトリに入るすべてのバージョンを制御し、誤って別のコンポーネントのGUIDを使用して以前のバージョンを踏み外すことができないようにしました(アンインストール時にファイルが削除されるref-countingされていないため)。
はあなたが行うことができ、その後、インストールするには:
<Component Directory="VersionDir">
<File Source="foo.dll"/>
</Component>
私はGUIDを指定していないに注意してください、またそのことについては、他のID。それらは生成され、GUIDは安定しています(つまり、同じバージョンを使用すると、バージョンを変更するまで、その後のすべての再構築で同じGUIDが使用されます)。
この使用例(および参照先のC#プロジェクト内のファイルからバージョンを取得する方法)については、https://github.com/heaths/psmsi/tree/develop/src/Setupを参照してください。
まあ、私はインストールフォルダについて質問しませんでした。私は、バージョン番号 – Arti
のフォルダにmsiを自動的に構築する方法について質問しました。「msiを自動的にフォルダに構築する」ということは何を意味していますか? MSI構築のポイントは、特定のフォルダに物事をインストールすることです。緩いファイルのソースフォルダのレイアウトについて話している場合は、同じ推奨事項が適用されます。 Name属性はデフォルトの宛先とソース名ですが、Sourceディレクトリを明示的に設定することもできます。 – Heath
Visual Studioで '' 'Build'''ボタンをクリックすると、' '' .msi'''ファイルを新しいフォルダに入れたいのです(フォルダの名前はプログラムのアセンブリバージョンでなければなりません)。私の質問の構造を参照してください。そして、私はサーバー上のユーザー用にこのフォルダを公開したいので、必要なバージョンをダウンロードすることができます。 私の質問は、バージョンでの間違いを防ぐためにこれを自動的に行うことです。 – Arti