我已經爲MSBuild創建了一個任務供開發人員使用,並且希望創建一個安裝程序將任務和關聯的.targets文件安裝到Program Files的MSBuild擴展文件夾中(通常爲C:/Program Files/MSBuild在32位XP上)。安裝MSBuild擴展
爲了做到這一點,我想在安裝時詢問系統文件夾的位置 - 是否有註冊表項提供此信息或其他安裝程序屬性?我打算使用WiX進行安裝。
我已經爲MSBuild創建了一個任務供開發人員使用,並且希望創建一個安裝程序將任務和關聯的.targets文件安裝到Program Files的MSBuild擴展文件夾中(通常爲C:/Program Files/MSBuild在32位XP上)。安裝MSBuild擴展
爲了做到這一點,我想在安裝時詢問系統文件夾的位置 - 是否有註冊表項提供此信息或其他安裝程序屬性?我打算使用WiX進行安裝。
我們這樣做正是這一點(多:)
的東西,如創建一個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
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 \微軟\維克斯
如果你使用的是64位窗口,它會安裝在錯誤的文件夾中。他們必須有一些處理程序文件或程序文件(x86)的其他代碼。 其實我只是通過他們的代碼挖掘,它看起來?就像它們包含x86和x64組件一樣,如果它是x64平臺,就用x64組件重寫x86組件。有趣:) – si618 2009-09-01 07:43:27
謝謝。正如我懷疑的那樣,MSBuild路徑被硬編碼到安裝程序中。我喜歡在64位和32位之間切換的代碼。但是,我們目前還沒有任何64位硬件可以測試,因此當我無法驗證我寫的內容時,我不確定我應該甚至嘗試支持它。 – 2009-09-01 13:54:24
True :)另外,如果你想將你的任務模式集成到Visual Studio(2005&2008)中,我已經有了WiX代碼來做到這一點,只需要提出另一個問題併發布答案。 – si618 2009-09-01 23:52:40