2016-09-15 79 views
1

当我构建安装程序项目(如ClickOnce发布按钮)时,可以根据WIX配置文件中的项目Assembly version<?define ProductVersion="1.0.0.0" ?>版本生成新文件夹。 我想是这样的:为每个新版本创建新文件夹WIX

MyProjectPublishes/ 
----MyProject1.0.0.0/ 
     MyProjectSetup.msi 
----MyProject2.0.0.0/ 
     MyProjectSetup.msi 
----MyProject3.0.0.0/ 
     MyProjectSetup.msi 

回答

1

是的,但请记住,您的MSI不应该是主要的升级,否则将删除以前的版本(除非这就是你想要的东西,大概你想并排侧所以它们都可以同时安装)。

首先,明白你不应该硬编码组件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定义为根产品路径,以便您控制进入每个版本目录的所有版本,以便用户不会意外踩过具有不同组件GU​​ID的以前版本(不同的组件GUID到同一位置会导致在卸载时删除文件因为它们没有被重新计数)。

要安装的话,你可以这样做:

<Component Directory="VersionDir"> 
    <File Source="foo.dll"/> 
</Component> 

注意,我没有指定GUID,也没有任何其他ID为这一问题。它们将被生成,并且GUID将保持稳定(也就是说,使用相同的版本,所有后续重建将具有相同的GUID,直到您更改版本 - 这正是它的工作方式)。

要查看正在使用的示例(以及如何从引用的C#项目中的文件获取版本),请参阅https://github.com/heaths/psmsi/tree/develop/src/Setup

+0

好吧,我没有问安装文件夹。我问了如何自动构建msi到版本号为 – Arti

+0

的文件夹什么是“自动构建msi到文件夹”?构建MSI的要点是将东西安装到特定的文件夹。如果您正在讨论松散文件的源文件夹布局,则适用相同的建议。 Name属性是默认的目标和源名称,但您始终可以显式设置Source目录。 – Heath

+0

我的意思是当你在Visual Studio中点击''Build'''按钮时,我想在新文件夹中找到'''.msi'''文件(文件夹的名字应该是程序的Assembly Version)。看到我的问题的结构。然后我想为服务器上的用户发布此文件夹,以便他们能够下载他们需要的版本。 而我的问题是:这是可能的自动执行,以防止版本的错误。 – Arti

相关问题