2009-08-31 229 views
1

我已經爲MSBuild創建了一個任務供開發人員使用,並且希望創建一個安裝程序將任務和關聯的.targets文件安裝到Program Files的MSBuild擴展文件夾中(通常爲C:/Program Files/MSBuild在32位XP上)。安裝MSBuild擴展

爲了做到這一點,我想在安裝時詢問系統文件夾的位置 - 是否有註冊表項提供此信息或其他安裝程序屬性?我打算使用WiX進行安裝。

回答

1

我們這樣做正是這一點(多:)

的東西,如創建一個WXI文件:

<!-- Product name as you want it to appear in Add/Remove Programs--> 
<?if $(var.Platform) = x64 ?> 
    <!-- Product name as you want it to appear in Add/Remove Programs--> 
    <?define ProductName = "Custom MSBuild Tasks (64 bit)" ?> 
    <?define Win64 = "yes" ?> 
    <?define PlatformProgramFilesFolder = "ProgramFiles64Folder" ?> 
<?else ?> 
    <?define ProductName = "Custom MSBuild Tasks" ?> 
    <?define Win64 = "no" ?> 
    <?define PlatformProgramFilesFolder = "ProgramFilesFolder" ?> 
<?endif ?> 

<!-- Directory name used under MSBuild --> 
<?define InstallName = "CustomTasks" ?> 

然後當你需要定義你的組件時:

<Fragment Id="ComponentsFragment"> 
    <Directory Id="TARGETDIR" Name="SourceDir"> 
    <Directory Id="$(var.PlatformProgramFilesFolder)"> 
     <Directory Id="MSBuildFolder" Name="MSBuild"> 
     <Directory Id="INSTALLLOCATION" Name="$(var.InstallName)"> 
      ... Your custom .Targets and tasks go here 
+0

謝謝。正如我懷疑的那樣,MSBuild路徑被硬編碼到安裝程序中。我喜歡在64位和32位之間切換的代碼。但是,我們目前還沒有任何64位硬件可以測試,因此當我無法驗證我寫的內容時,我不確定我應該甚至嘗試支持它。 – 2009-09-01 13:54:24

+0

True :)另外,如果你想將你的任務模式集成到Visual Studio(2005&2008)中,我已經有了WiX代碼來做到這一點,只需要提出另一個問題併發布答案。 – si618 2009-09-01 23:52:40

2

Wix本身有一個MSBuild任務,所以我認爲最好的看看他們是如何做到的,relvent的源代碼是Toolset.wxs(谷歌代碼搜索)。

看,他們所定義的文件夾的MSBuild部分:

<DirectoryRef Id="ProgramFilesFolder"> 
    <Directory Id="Dir_MSBuild" Name="MSBuild"> 
     <Directory Id="Dir_MSBuildMS" Name="Microsoft"> 
      <Directory Id="Dir_MSBuildMSWix" Name="WiX"> 
       <Directory Id="Dir_MSBuildMSWix35" Name="v3.5"> 
        <Component Id="WixMSBuildBinaries35" 
           Guid="2CB1EA5F-2542-4AFF-A05B-FAF576265F89" 
           Win64="no"> 
         <File Source="WixTasks.dll" Checksum="yes" 
           KeyPath="yes" Vital="yes" /> 
        </Component> 
       </Directory> 
      </Directory> 
     </Directory> 
    </Directory> 
</DirectoryRef> 

這將在\ Program Files文件安裝維克斯MSBuild任務(WixTasks.dll)\的MSBuild \微軟\維克斯

+0

如果你使用的是64位窗口,它會安裝在錯誤的文件夾中。他們必須有一些處理程序文件或程序文件(x86)的其他代碼。 其實我只是通過他們的代碼挖掘,它看起來?就像它們包含x86和x64組件一樣,如果它是x64平臺,就用x64組件重寫x86組件。有趣:) – si618 2009-09-01 07:43:27