WiXむンストヌラヌにファむルを自動的に远加する

こんにちは、同僚。 私の蚘事では、WiXテクノロゞヌを䜿甚しおむンストヌラヌを䜜成したい開発者が遭遇する可胜性のある問題を匷調したいず思いたす。

倚くのプログラマヌは、゜フトりェア補品のむンストヌラヌを䜜成するタスクに盎面しおいるず思いたす。 それで同じ運呜が私を襲った。 WiXを䜿甚するこずになりたした。 ビルドサヌバヌでむンストヌラヌの自動アセンブリを䜜成する必芁がありたした。 ファむルがむンストヌル甚に取埗されるプロゞェクトは倉曎される可胜性があるため、むンストヌラヌに远加する必芁があるファむルのリストを厳密に指定するこずはできたせん。







プロゞェクトはMS Visual Studio 2010で䜜成されおいたす。プロゞェクトを䜜成せず、むンストヌラヌの䜜成のみに䜿甚する人にずっおは、この蚘事は興味深いものになりたす。

WiXにはheat.exeナヌティリティがバンドルされおいたす。これは、フォルダたたはプロゞェクトからファむルを自動的に収集するためのツヌルずしお機胜したすさらにいく぀かのオプションがありたす。 コマンドがここにあるコン゜ヌルアプリケヌション。

問題の最初の調査䞭に、プロゞェクトの出力フォルダからファむルを自動的に収集するオプションが最適で最も䟿利なオプションであるず思われたした。 これを行うには、出力を取埗し、プロゞェクトファむルに小さな倉曎を加える必芁があるプロゞェクトぞのリンクを远加するだけですVSで開発する人にずっおの利点。 しかし、この可胜性を研究する過皋で、heat.exeナヌティリティは* .exeプロゞェクトファむルず構成ファむル以倖の出力から䜕も収集しないこずが刀明したした。 この問題の原因を長期にわたっお調査した結果、2010幎3月以降、このような゚ラヌはすでに刀明しおいたすが、ただ解決されおいたせん。

そのため、最も䟿利なオプションはなくなりたしたが、問題は同じたたでした。ファむルを自動的に远加する必芁があり、他の゜リュヌションを怜蚎するプロセスが開始されたした。 将来を芋据えお、もちろん解決策が芋぀かったず蚀えたす

heat.exeナヌティリティには、䞊蚘のようにプロゞェクトからファむルを远加する機胜だけでなく、指定できるフォルダヌからファむルを収集する機胜もありたす。 私はこのオプションを調査し始めたした。 heat.exeは、プロゞェクトからではなく、フォルダからすべおのファむルを既に远加し、遞択的なファむルのみを远加しおいるこずが刀明したした。 すでに小さな勝利でした。 しかし、銀の裏地はありたせん。

heat.exeナヌティリティを実行するずきに、フォルダヌから収集するファむルの皮類を指定できたす。 「バむナリ」ず「コンテンツ」ずいう2぀のカテゎリに興味がありたした。 最初のカテゎリは* .dllおよび* .exeファむルを担圓し、2番目は構成ファむルを担圓したす。 実際には、これらのパラメヌタを枡しおも枡さなくおもナヌティリティは気にしないこずが刀明したした。 圌女は、䜕も起こらなかったように、フォルダヌ内のすべおを収集し続けたした。 このオプションは私には向いおいたせん。

ナヌティリティ自䜓から少し脱線し、最終的には䜕を取埗したいかに぀いお話したしょう。 目的の圢匏のファむルの説明を含むファむルを取埗する必芁がありたす。 ファむルは、ファむルの識別子ずそのパスを栌玍するxmlドキュメントです。 識別子はGUIDです。 自動化されたツヌルを䜿甚せず、そのようなファむルを手で詰めるこずは楜しい䜜業ではありたせん。

heat.exeナヌティリティは、このようなファむルを生成するだけです。 しかし、私の堎合は、ゎミが入りたす。 ただし、これはxmlドキュメントであるため、XSLT倉換を適甚できたす。 結果のファむルから䞍芁なファむルの説明を削陀するだけで十分です。 そしお、嬉しいこずに、heat.exeはそのようなファむルをパラメヌタヌずしお受け入れるこずができたす。

その結果、倉換を含むファむルを䜜成し、入力heat.exeに転送したした。 そしお今、私はすでに必芁なファむルの所有者を誇りに思っおいたす。 むンストヌラヌプロゞェクトのビルド前むベントに正しいheat.exe開始行を曞き蟌み、生成されたファむルをプロゞェクトに远加するだけです。 長い仕事の成果は成功し、目暙は達成されたした。 むンストヌラヌは、生物の介入なしに自動的にビルドしたす。

それでも、著者の赀い蚀葉のためにこの蚘事を読んでいるわけではありたせんが、この䞀連の文字党䜓を実甚的なプロゞェクトに倉える方法を理解したいず考えおいたす。



新しいむンストヌラヌプロゞェクトを䜜成し、「AutoAddingFilesInstaller」ず呌びたす。 プロゞェクトに新しいファむルを远加したす。これを「出力」ず呌びたす。 1。



画像

図1プロゞェクトファむルの内容



このファむルには、ファむルグルヌプの説明を远加したす。 私のプロゞェクトでは、ファむルを2぀のグルヌプに分けたした。heat.exeが䜿甚するのず同じグルヌプです。





ファむルはどのようになりたすか 圌を芋おみたしょう。



<? xml version ="1.0" encoding ="UTF-8" ? > < Wix xmlns ="http://schemas.microsoft.com/wix/2006/wi" > < Fragment > < DirectoryRef Id ="INSTALLLOCATION" > < Directory Id ="BinariesDir" ComponentGuidGenerationSeed ="DBA8384E-CE1B-41af-B573-4203FB8A6A3B" > < Directory Id ="Output.Binaries" /> </ Directory > </ DirectoryRef > < DirectoryRef Id ="INSTALLLOCATION" > < Directory Id ="ContentDir" ComponentGuidGenerationSeed ="35A3DCB8-4F85-4e3f-AC83-C51B78C04B94" Name ="NewConfigurationFiles" > < Directory Id ="Output.Content" /> </ Directory > </ DirectoryRef > < ComponentGroup Id ="OutputGroup" > < ComponentGroupRef Id ="Output.Binaries" /> < ComponentGroupRef Id ="Output.Content" /> </ ComponentGroup > </ Fragment > </ Wix > * This source code was highlighted with Source Code Highlighter .



  1. <? xml version ="1.0" encoding ="UTF-8" ? > < Wix xmlns ="http://schemas.microsoft.com/wix/2006/wi" > < Fragment > < DirectoryRef Id ="INSTALLLOCATION" > < Directory Id ="BinariesDir" ComponentGuidGenerationSeed ="DBA8384E-CE1B-41af-B573-4203FB8A6A3B" > < Directory Id ="Output.Binaries" /> </ Directory > </ DirectoryRef > < DirectoryRef Id ="INSTALLLOCATION" > < Directory Id ="ContentDir" ComponentGuidGenerationSeed ="35A3DCB8-4F85-4e3f-AC83-C51B78C04B94" Name ="NewConfigurationFiles" > < Directory Id ="Output.Content" /> </ Directory > </ DirectoryRef > < ComponentGroup Id ="OutputGroup" > < ComponentGroupRef Id ="Output.Binaries" /> < ComponentGroupRef Id ="Output.Content" /> </ ComponentGroup > </ Fragment > </ Wix > * This source code was highlighted with Source Code Highlighter .



  2. <? xml version ="1.0" encoding ="UTF-8" ? > < Wix xmlns ="http://schemas.microsoft.com/wix/2006/wi" > < Fragment > < DirectoryRef Id ="INSTALLLOCATION" > < Directory Id ="BinariesDir" ComponentGuidGenerationSeed ="DBA8384E-CE1B-41af-B573-4203FB8A6A3B" > < Directory Id ="Output.Binaries" /> </ Directory > </ DirectoryRef > < DirectoryRef Id ="INSTALLLOCATION" > < Directory Id ="ContentDir" ComponentGuidGenerationSeed ="35A3DCB8-4F85-4e3f-AC83-C51B78C04B94" Name ="NewConfigurationFiles" > < Directory Id ="Output.Content" /> </ Directory > </ DirectoryRef > < ComponentGroup Id ="OutputGroup" > < ComponentGroupRef Id ="Output.Binaries" /> < ComponentGroupRef Id ="Output.Content" /> </ ComponentGroup > </ Fragment > </ Wix > * This source code was highlighted with Source Code Highlighter .



  3. <? xml version ="1.0" encoding ="UTF-8" ? > < Wix xmlns ="http://schemas.microsoft.com/wix/2006/wi" > < Fragment > < DirectoryRef Id ="INSTALLLOCATION" > < Directory Id ="BinariesDir" ComponentGuidGenerationSeed ="DBA8384E-CE1B-41af-B573-4203FB8A6A3B" > < Directory Id ="Output.Binaries" /> </ Directory > </ DirectoryRef > < DirectoryRef Id ="INSTALLLOCATION" > < Directory Id ="ContentDir" ComponentGuidGenerationSeed ="35A3DCB8-4F85-4e3f-AC83-C51B78C04B94" Name ="NewConfigurationFiles" > < Directory Id ="Output.Content" /> </ Directory > </ DirectoryRef > < ComponentGroup Id ="OutputGroup" > < ComponentGroupRef Id ="Output.Binaries" /> < ComponentGroupRef Id ="Output.Content" /> </ ComponentGroup > </ Fragment > </ Wix > * This source code was highlighted with Source Code Highlighter .



  4. <? xml version ="1.0" encoding ="UTF-8" ? > < Wix xmlns ="http://schemas.microsoft.com/wix/2006/wi" > < Fragment > < DirectoryRef Id ="INSTALLLOCATION" > < Directory Id ="BinariesDir" ComponentGuidGenerationSeed ="DBA8384E-CE1B-41af-B573-4203FB8A6A3B" > < Directory Id ="Output.Binaries" /> </ Directory > </ DirectoryRef > < DirectoryRef Id ="INSTALLLOCATION" > < Directory Id ="ContentDir" ComponentGuidGenerationSeed ="35A3DCB8-4F85-4e3f-AC83-C51B78C04B94" Name ="NewConfigurationFiles" > < Directory Id ="Output.Content" /> </ Directory > </ DirectoryRef > < ComponentGroup Id ="OutputGroup" > < ComponentGroupRef Id ="Output.Binaries" /> < ComponentGroupRef Id ="Output.Content" /> </ ComponentGroup > </ Fragment > </ Wix > * This source code was highlighted with Source Code Highlighter .



  5. <? xml version ="1.0" encoding ="UTF-8" ? > < Wix xmlns ="http://schemas.microsoft.com/wix/2006/wi" > < Fragment > < DirectoryRef Id ="INSTALLLOCATION" > < Directory Id ="BinariesDir" ComponentGuidGenerationSeed ="DBA8384E-CE1B-41af-B573-4203FB8A6A3B" > < Directory Id ="Output.Binaries" /> </ Directory > </ DirectoryRef > < DirectoryRef Id ="INSTALLLOCATION" > < Directory Id ="ContentDir" ComponentGuidGenerationSeed ="35A3DCB8-4F85-4e3f-AC83-C51B78C04B94" Name ="NewConfigurationFiles" > < Directory Id ="Output.Content" /> </ Directory > </ DirectoryRef > < ComponentGroup Id ="OutputGroup" > < ComponentGroupRef Id ="Output.Binaries" /> < ComponentGroupRef Id ="Output.Content" /> </ ComponentGroup > </ Fragment > </ Wix > * This source code was highlighted with Source Code Highlighter .



  6. <? xml version ="1.0" encoding ="UTF-8" ? > < Wix xmlns ="http://schemas.microsoft.com/wix/2006/wi" > < Fragment > < DirectoryRef Id ="INSTALLLOCATION" > < Directory Id ="BinariesDir" ComponentGuidGenerationSeed ="DBA8384E-CE1B-41af-B573-4203FB8A6A3B" > < Directory Id ="Output.Binaries" /> </ Directory > </ DirectoryRef > < DirectoryRef Id ="INSTALLLOCATION" > < Directory Id ="ContentDir" ComponentGuidGenerationSeed ="35A3DCB8-4F85-4e3f-AC83-C51B78C04B94" Name ="NewConfigurationFiles" > < Directory Id ="Output.Content" /> </ Directory > </ DirectoryRef > < ComponentGroup Id ="OutputGroup" > < ComponentGroupRef Id ="Output.Binaries" /> < ComponentGroupRef Id ="Output.Content" /> </ ComponentGroup > </ Fragment > </ Wix > * This source code was highlighted with Source Code Highlighter .



  7. <? xml version ="1.0" encoding ="UTF-8" ? > < Wix xmlns ="http://schemas.microsoft.com/wix/2006/wi" > < Fragment > < DirectoryRef Id ="INSTALLLOCATION" > < Directory Id ="BinariesDir" ComponentGuidGenerationSeed ="DBA8384E-CE1B-41af-B573-4203FB8A6A3B" > < Directory Id ="Output.Binaries" /> </ Directory > </ DirectoryRef > < DirectoryRef Id ="INSTALLLOCATION" > < Directory Id ="ContentDir" ComponentGuidGenerationSeed ="35A3DCB8-4F85-4e3f-AC83-C51B78C04B94" Name ="NewConfigurationFiles" > < Directory Id ="Output.Content" /> </ Directory > </ DirectoryRef > < ComponentGroup Id ="OutputGroup" > < ComponentGroupRef Id ="Output.Binaries" /> < ComponentGroupRef Id ="Output.Content" /> </ ComponentGroup > </ Fragment > </ Wix > * This source code was highlighted with Source Code Highlighter .



  8. <? xml version ="1.0" encoding ="UTF-8" ? > < Wix xmlns ="http://schemas.microsoft.com/wix/2006/wi" > < Fragment > < DirectoryRef Id ="INSTALLLOCATION" > < Directory Id ="BinariesDir" ComponentGuidGenerationSeed ="DBA8384E-CE1B-41af-B573-4203FB8A6A3B" > < Directory Id ="Output.Binaries" /> </ Directory > </ DirectoryRef > < DirectoryRef Id ="INSTALLLOCATION" > < Directory Id ="ContentDir" ComponentGuidGenerationSeed ="35A3DCB8-4F85-4e3f-AC83-C51B78C04B94" Name ="NewConfigurationFiles" > < Directory Id ="Output.Content" /> </ Directory > </ DirectoryRef > < ComponentGroup Id ="OutputGroup" > < ComponentGroupRef Id ="Output.Binaries" /> < ComponentGroupRef Id ="Output.Content" /> </ ComponentGroup > </ Fragment > </ Wix > * This source code was highlighted with Source Code Highlighter .



  9. <? xml version ="1.0" encoding ="UTF-8" ? > < Wix xmlns ="http://schemas.microsoft.com/wix/2006/wi" > < Fragment > < DirectoryRef Id ="INSTALLLOCATION" > < Directory Id ="BinariesDir" ComponentGuidGenerationSeed ="DBA8384E-CE1B-41af-B573-4203FB8A6A3B" > < Directory Id ="Output.Binaries" /> </ Directory > </ DirectoryRef > < DirectoryRef Id ="INSTALLLOCATION" > < Directory Id ="ContentDir" ComponentGuidGenerationSeed ="35A3DCB8-4F85-4e3f-AC83-C51B78C04B94" Name ="NewConfigurationFiles" > < Directory Id ="Output.Content" /> </ Directory > </ DirectoryRef > < ComponentGroup Id ="OutputGroup" > < ComponentGroupRef Id ="Output.Binaries" /> < ComponentGroupRef Id ="Output.Content" /> </ ComponentGroup > </ Fragment > </ Wix > * This source code was highlighted with Source Code Highlighter .



  10. <? xml version ="1.0" encoding ="UTF-8" ? > < Wix xmlns ="http://schemas.microsoft.com/wix/2006/wi" > < Fragment > < DirectoryRef Id ="INSTALLLOCATION" > < Directory Id ="BinariesDir" ComponentGuidGenerationSeed ="DBA8384E-CE1B-41af-B573-4203FB8A6A3B" > < Directory Id ="Output.Binaries" /> </ Directory > </ DirectoryRef > < DirectoryRef Id ="INSTALLLOCATION" > < Directory Id ="ContentDir" ComponentGuidGenerationSeed ="35A3DCB8-4F85-4e3f-AC83-C51B78C04B94" Name ="NewConfigurationFiles" > < Directory Id ="Output.Content" /> </ Directory > </ DirectoryRef > < ComponentGroup Id ="OutputGroup" > < ComponentGroupRef Id ="Output.Binaries" /> < ComponentGroupRef Id ="Output.Content" /> </ ComponentGroup > </ Fragment > </ Wix > * This source code was highlighted with Source Code Highlighter .



  11. <? xml version ="1.0" encoding ="UTF-8" ? > < Wix xmlns ="http://schemas.microsoft.com/wix/2006/wi" > < Fragment > < DirectoryRef Id ="INSTALLLOCATION" > < Directory Id ="BinariesDir" ComponentGuidGenerationSeed ="DBA8384E-CE1B-41af-B573-4203FB8A6A3B" > < Directory Id ="Output.Binaries" /> </ Directory > </ DirectoryRef > < DirectoryRef Id ="INSTALLLOCATION" > < Directory Id ="ContentDir" ComponentGuidGenerationSeed ="35A3DCB8-4F85-4e3f-AC83-C51B78C04B94" Name ="NewConfigurationFiles" > < Directory Id ="Output.Content" /> </ Directory > </ DirectoryRef > < ComponentGroup Id ="OutputGroup" > < ComponentGroupRef Id ="Output.Binaries" /> < ComponentGroupRef Id ="Output.Content" /> </ ComponentGroup > </ Fragment > </ Wix > * This source code was highlighted with Source Code Highlighter .



  12. <? xml version ="1.0" encoding ="UTF-8" ? > < Wix xmlns ="http://schemas.microsoft.com/wix/2006/wi" > < Fragment > < DirectoryRef Id ="INSTALLLOCATION" > < Directory Id ="BinariesDir" ComponentGuidGenerationSeed ="DBA8384E-CE1B-41af-B573-4203FB8A6A3B" > < Directory Id ="Output.Binaries" /> </ Directory > </ DirectoryRef > < DirectoryRef Id ="INSTALLLOCATION" > < Directory Id ="ContentDir" ComponentGuidGenerationSeed ="35A3DCB8-4F85-4e3f-AC83-C51B78C04B94" Name ="NewConfigurationFiles" > < Directory Id ="Output.Content" /> </ Directory > </ DirectoryRef > < ComponentGroup Id ="OutputGroup" > < ComponentGroupRef Id ="Output.Binaries" /> < ComponentGroupRef Id ="Output.Content" /> </ ComponentGroup > </ Fragment > </ Wix > * This source code was highlighted with Source Code Highlighter .



  13. <? xml version ="1.0" encoding ="UTF-8" ? > < Wix xmlns ="http://schemas.microsoft.com/wix/2006/wi" > < Fragment > < DirectoryRef Id ="INSTALLLOCATION" > < Directory Id ="BinariesDir" ComponentGuidGenerationSeed ="DBA8384E-CE1B-41af-B573-4203FB8A6A3B" > < Directory Id ="Output.Binaries" /> </ Directory > </ DirectoryRef > < DirectoryRef Id ="INSTALLLOCATION" > < Directory Id ="ContentDir" ComponentGuidGenerationSeed ="35A3DCB8-4F85-4e3f-AC83-C51B78C04B94" Name ="NewConfigurationFiles" > < Directory Id ="Output.Content" /> </ Directory > </ DirectoryRef > < ComponentGroup Id ="OutputGroup" > < ComponentGroupRef Id ="Output.Binaries" /> < ComponentGroupRef Id ="Output.Content" /> </ ComponentGroup > </ Fragment > </ Wix > * This source code was highlighted with Source Code Highlighter .



  14. <? xml version ="1.0" encoding ="UTF-8" ? > < Wix xmlns ="http://schemas.microsoft.com/wix/2006/wi" > < Fragment > < DirectoryRef Id ="INSTALLLOCATION" > < Directory Id ="BinariesDir" ComponentGuidGenerationSeed ="DBA8384E-CE1B-41af-B573-4203FB8A6A3B" > < Directory Id ="Output.Binaries" /> </ Directory > </ DirectoryRef > < DirectoryRef Id ="INSTALLLOCATION" > < Directory Id ="ContentDir" ComponentGuidGenerationSeed ="35A3DCB8-4F85-4e3f-AC83-C51B78C04B94" Name ="NewConfigurationFiles" > < Directory Id ="Output.Content" /> </ Directory > </ DirectoryRef > < ComponentGroup Id ="OutputGroup" > < ComponentGroupRef Id ="Output.Binaries" /> < ComponentGroupRef Id ="Output.Content" /> </ ComponentGroup > </ Fragment > </ Wix > * This source code was highlighted with Source Code Highlighter .



  15. <? xml version ="1.0" encoding ="UTF-8" ? > < Wix xmlns ="http://schemas.microsoft.com/wix/2006/wi" > < Fragment > < DirectoryRef Id ="INSTALLLOCATION" > < Directory Id ="BinariesDir" ComponentGuidGenerationSeed ="DBA8384E-CE1B-41af-B573-4203FB8A6A3B" > < Directory Id ="Output.Binaries" /> </ Directory > </ DirectoryRef > < DirectoryRef Id ="INSTALLLOCATION" > < Directory Id ="ContentDir" ComponentGuidGenerationSeed ="35A3DCB8-4F85-4e3f-AC83-C51B78C04B94" Name ="NewConfigurationFiles" > < Directory Id ="Output.Content" /> </ Directory > </ DirectoryRef > < ComponentGroup Id ="OutputGroup" > < ComponentGroupRef Id ="Output.Binaries" /> < ComponentGroupRef Id ="Output.Content" /> </ ComponentGroup > </ Fragment > </ Wix > * This source code was highlighted with Source Code Highlighter .



  16. <? xml version ="1.0" encoding ="UTF-8" ? > < Wix xmlns ="http://schemas.microsoft.com/wix/2006/wi" > < Fragment > < DirectoryRef Id ="INSTALLLOCATION" > < Directory Id ="BinariesDir" ComponentGuidGenerationSeed ="DBA8384E-CE1B-41af-B573-4203FB8A6A3B" > < Directory Id ="Output.Binaries" /> </ Directory > </ DirectoryRef > < DirectoryRef Id ="INSTALLLOCATION" > < Directory Id ="ContentDir" ComponentGuidGenerationSeed ="35A3DCB8-4F85-4e3f-AC83-C51B78C04B94" Name ="NewConfigurationFiles" > < Directory Id ="Output.Content" /> </ Directory > </ DirectoryRef > < ComponentGroup Id ="OutputGroup" > < ComponentGroupRef Id ="Output.Binaries" /> < ComponentGroupRef Id ="Output.Content" /> </ ComponentGroup > </ Fragment > </ Wix > * This source code was highlighted with Source Code Highlighter .



  17. <? xml version ="1.0" encoding ="UTF-8" ? > < Wix xmlns ="http://schemas.microsoft.com/wix/2006/wi" > < Fragment > < DirectoryRef Id ="INSTALLLOCATION" > < Directory Id ="BinariesDir" ComponentGuidGenerationSeed ="DBA8384E-CE1B-41af-B573-4203FB8A6A3B" > < Directory Id ="Output.Binaries" /> </ Directory > </ DirectoryRef > < DirectoryRef Id ="INSTALLLOCATION" > < Directory Id ="ContentDir" ComponentGuidGenerationSeed ="35A3DCB8-4F85-4e3f-AC83-C51B78C04B94" Name ="NewConfigurationFiles" > < Directory Id ="Output.Content" /> </ Directory > </ DirectoryRef > < ComponentGroup Id ="OutputGroup" > < ComponentGroupRef Id ="Output.Binaries" /> < ComponentGroupRef Id ="Output.Content" /> </ ComponentGroup > </ Fragment > </ Wix > * This source code was highlighted with Source Code Highlighter .



  18. <? xml version ="1.0" encoding ="UTF-8" ? > < Wix xmlns ="http://schemas.microsoft.com/wix/2006/wi" > < Fragment > < DirectoryRef Id ="INSTALLLOCATION" > < Directory Id ="BinariesDir" ComponentGuidGenerationSeed ="DBA8384E-CE1B-41af-B573-4203FB8A6A3B" > < Directory Id ="Output.Binaries" /> </ Directory > </ DirectoryRef > < DirectoryRef Id ="INSTALLLOCATION" > < Directory Id ="ContentDir" ComponentGuidGenerationSeed ="35A3DCB8-4F85-4e3f-AC83-C51B78C04B94" Name ="NewConfigurationFiles" > < Directory Id ="Output.Content" /> </ Directory > </ DirectoryRef > < ComponentGroup Id ="OutputGroup" > < ComponentGroupRef Id ="Output.Binaries" /> < ComponentGroupRef Id ="Output.Content" /> </ ComponentGroup > </ Fragment > </ Wix > * This source code was highlighted with Source Code Highlighter .



  19. <? xml version ="1.0" encoding ="UTF-8" ? > < Wix xmlns ="http://schemas.microsoft.com/wix/2006/wi" > < Fragment > < DirectoryRef Id ="INSTALLLOCATION" > < Directory Id ="BinariesDir" ComponentGuidGenerationSeed ="DBA8384E-CE1B-41af-B573-4203FB8A6A3B" > < Directory Id ="Output.Binaries" /> </ Directory > </ DirectoryRef > < DirectoryRef Id ="INSTALLLOCATION" > < Directory Id ="ContentDir" ComponentGuidGenerationSeed ="35A3DCB8-4F85-4e3f-AC83-C51B78C04B94" Name ="NewConfigurationFiles" > < Directory Id ="Output.Content" /> </ Directory > </ DirectoryRef > < ComponentGroup Id ="OutputGroup" > < ComponentGroupRef Id ="Output.Binaries" /> < ComponentGroupRef Id ="Output.Content" /> </ ComponentGroup > </ Fragment > </ Wix > * This source code was highlighted with Source Code Highlighter .



<? xml version ="1.0" encoding ="UTF-8" ? > < Wix xmlns ="http://schemas.microsoft.com/wix/2006/wi" > < Fragment > < DirectoryRef Id ="INSTALLLOCATION" > < Directory Id ="BinariesDir" ComponentGuidGenerationSeed ="DBA8384E-CE1B-41af-B573-4203FB8A6A3B" > < Directory Id ="Output.Binaries" /> </ Directory > </ DirectoryRef > < DirectoryRef Id ="INSTALLLOCATION" > < Directory Id ="ContentDir" ComponentGuidGenerationSeed ="35A3DCB8-4F85-4e3f-AC83-C51B78C04B94" Name ="NewConfigurationFiles" > < Directory Id ="Output.Content" /> </ Directory > </ DirectoryRef > < ComponentGroup Id ="OutputGroup" > < ComponentGroupRef Id ="Output.Binaries" /> < ComponentGroupRef Id ="Output.Content" /> </ ComponentGroup > </ Fragment > </ Wix > * This source code was highlighted with Source Code Highlighter .







䜕がありたすか 2぀のディレクトリ「BinariesDir」、「ContentDir」を䜜成したした。これらは、プログラムがむンストヌルされおいるフォルダヌ「INSTALLLOCATION」にありたす。 したがっお、ファむルを含むディレクトリがプロゞェクトに远加される2぀のリンクを䜜成したした。

次に、遞択したすべおのファむルタむプを含むコンポヌネントのグルヌプを䜜成する必芁がありたす。 それを「OutputGroup」ず呌びたしょう。 䜜成されたディレクトリぞのリンクを保存したす。 したがっお、我々はそれらから情報を収集したいず蚀いたす。

ここで、ファむル「OutputFiles」を䜜成したす。このファむルには、ファむルのリストが保存されたす。 このファむルは、heat.exeナヌティリティによっお自動的に曞き蟌たれたす。 今のずころ、このファむルをほずんど空にしたす。 䜜成したフォルダぞのリンクのみを远加したす。 次のようになりたす。







  1. < xml バヌゞョン = "1.0" encoding = "utf-8"  >
  2. < Wix xmlns = "http://schemas.microsoft.com/wix/2006/wi" >
  3. < フラグメント >
  4. < DirectoryRef Id = "Output.Content" >
  5. </ DirectoryRef >
  6. < DirectoryRef Id = "Output.Binaries" >
  7. </ DirectoryRef >
  8. </ フラグメント >
  9. < フラグメント >
  10. < ComponentGroup Id = "Output.Content" >
  11. </ ComponentGroup >
  12. < ComponentGroup Id = "Output.Binaries" >
  13. </ ComponentGroup >
  14. </ フラグメント >
  15. </ Wix >
*この゜ヌスコヌドは、 ゜ヌスコヌドハむラむタヌで匷調衚瀺されたした。




ここで、グルヌプ「OutputGroup」の説明を「Ficha」に远加しお、むンストヌラヌがそれを自分に远加する必芁があるこずを認識できるようにする必芁がありたす。 これを行うには、「メむン」ファむルに移動し、その䞭の「機胜」タグを芋぀けたす。 その䞭に私たちのグルヌプの蚘録を眮きたす。 その結果、次のようになりたす。







  1. < 機胜 ID = "ProductFeature" タむトル = "AutoAddingFilesInstaller" レベル = "1" >
  2. < ComponentGroupRef Id = "OutputGroup" />
  3. < ComponentGroupRef Id = "Product.Generated" />
  4. </ 機胜 >
*この゜ヌスコヌドは、 ゜ヌスコヌドハむラむタヌで匷調衚瀺されたした。




すべおが正しく曞かれおいるこずを確認した埌おそらくcopy-paste'noでも、プロゞェクトを組み立おようずしたす。 すべおが゚ラヌなく実行されるはずです。

正垞に䜜成されたすべおのむンフラストラクチャ。 次に、heat.exeナヌティリティに盎接枡したす。 プロゞェクトのプロパティに移動し、[むベントのビルド]タブに移動したす。 このタブには、「ビルド前のむベントコマンドラむン」りィンドりがありたす。 プロゞェクトビルドを取埗するにはファむルに関する情報が必芁なので、このりィンドりにナヌティリティ呌び出しを远加したす。

コヌルラむンを圢成し始めたす。 最初に「WIX\ bin \ heat.exe」を远加したす。 したがっお、ナヌティリティぞのパスがありたす。 ここで、「dir」パラメヌタヌを远加したす。 これは、フォルダヌから情報を収集するこずを意味したす。

少し圢匏的。 プロゞェクトのフォルダヌに移動し、そこに新しいフォルダヌ「゜ヌス」を䜜成したす。 凊理したいファむルを入れたす。 プロゞェクトの出力があるフォルダヌ、たたは耇数のプロゞェクトから必芁なファむルが収集されるフォルダヌを指定できたす。 プロゞェクトが機胜しおいるこずを確認するために、テストのためだけにこれを行いたす。 これは、図2内のテストフォルダヌの倖芳です。



画像

図2ファむルの取埗元のフォルダヌの内容



「WIX\ bin \ heat.exe」dir $ProjectDirsource 。 "ファむル情報が生成されるファむルをこの行に远加したす。このようなファむルは既に䜜成されおいたす。 「OutputFiles」です。

その結果、ラむンが次の圢匏を取埗しおいるこずがわかりたす。 「WIX\ bin \ heat.exe」dir「$ProjectDirsource」-o「$ProjectDirOutputFiles.wxs」-gg -sfrag



heat.exeの可胜性を探るずき、フォルダヌ内のファむルの皮類をフィルタヌ凊理できないこずが既にわかっおいたす。 ただし、xslt倉換は䜿甚できたす。 Wix.xsltファむルが䜜成され、生成されたheat.exeファむルの倉換が行われたす。 このファむルは次のようになりたす。







  1. < xml バヌゞョン = "1.0" encoding = "utf-8"  >
  2. < xslスタむルシヌト バヌゞョン = "1.0" xmlnsxsl = "http://www.w3.org/1999/XSL/Transform"
  3. xmlnswix = "http://schemas.microsoft.com/wix/2006/wi"
  4. xmlns = "http://schemas.microsoft.com/wix/2006/wi"
  5. exclude-result-prefixes = "wix"
  6. >
  7. < xsl出力 メ゜ッド = "xml" むンデント = "yes" />
  8. < xsltemplate match = "wixwix" >
  9. <-vshostおよびApp.configを陀く* .configを遞択したす->
  10. < xsl倉数 名 = "content" select = "wixフラグメント/ wixDirectoryRef / wixディレクトリ/ wixコンポヌネント[substringwixFile / @ Source、string-lengthwixFile / @ Source-5 = 'config' and notcontainswixFile / @ Source、 'vshost'and notsubstringwixFile / @ Source、string-lengthwixFile / @ Source-9= ' App.config '] " />
  11. <-vshostを陀く* .exe* .dllを遞択->
  12. < xsl倉数 名 = "binaries" select = "wixFragment / wixDirectoryRef / wixDirectory / wixComponent [substringwixFile / @ Source、string-lengthwixFile / @ Source-2 = 'dll'たたはサブストリングwixFile / @ Source、string-lengthwixFile / @ Source-2= 'exe' and notcontainswixFile / @ Source、 'vshost' ] " />
  13. < Wix >
  14. < フラグメント >
  15. < DirectoryRef Id = "Output.Content" >
  16. < xslapply-templates select = "$ content" />
  17. </ DirectoryRef >
  18. < DirectoryRef Id = "Output.Binaries" >
  19. < xslapply-templates select = "$バむナリ" />
  20. </ DirectoryRef >
  21. </ フラグメント >
  22. < フラグメント >
  23. < ComponentGroup Id = "Output.Content" >
  24. < xslfor-each select = "$ content" >
  25. < ComponentRef Id = "{@ Id}" />
  26. </ xslfor-each >
  27. </ ComponentGroup >
  28. < ComponentGroup Id = "Output.Binaries" >
  29. < xslfor-each select = "$バむナリ" >
  30. < ComponentRef Id = "{@ Id}" />
  31. </ xslfor-each >
  32. </ ComponentGroup >
  33. </ フラグメント >
  34. </ Wix >
  35. </ xslテンプレヌト >
  36. < xsltemplate match = "wixComponent" >
  37. < コンポヌネント ID = "{@ Id}" Guid = "{@ Guid}" >
  38. < File Id = "{wixFile / @ Id}" Source = "{concat '.. \ .. \ source'、substringwixFile / @ Source、10}" />
  39. </ コンポヌネント >
  40. </ xslテンプレヌト >
  41. </ xslスタむルシヌト >
*この゜ヌスコヌドは、 ゜ヌスコヌドハむラむタヌで匷調衚瀺されたした。




このファむルには、グルヌプの名前ず「゜ヌス」フォルダヌぞのパスが曞き蟌たれたす。 独自の目的で䜿甚する堎合は、これらのフィヌルドのみを倉曎する必芁がありたす。

これらすべおのアクションの結果ずしお、「Pre-build Event Command Line」りィンドりにレコヌドが必芁です。

"WIX\ bin \ heat.exe" dir "$ProjectDirsource" -t "$ProjectDirWix.xslt" -o "$ProjectDirOutputFiles.wxs" -gg –sfrag



その埌、プロゞェクトを組み立おお、「OutputFiles」ファむルが倉曎されたこずを確認できたす。

これは次のようになりたす。







  1. < xml バヌゞョン = "1.0" encoding = "utf-8"  >
  2. < Wix xmlns = "http://schemas.microsoft.com/wix/2006/wi" >
  3. < フラグメント >
  4. < DirectoryRef Id = "Output.Content" >
  5. < コンポヌネント ID = "cmpD86120B7C4146F9A886C539A986173D0" Guid = "{1B979A9E-BB11-48FD-B5B6-96FB50A94837}" >
  6. < ファむル ID = "fil1A7C67BC02C177948357049406DE080B" ゜ヌス = ".. \ .. \ source \ ExampleConfigurationFile.config" />
  7. </ コンポヌネント >
  8. </ DirectoryRef >
  9. < DirectoryRef Id = "Output.Binaries" >
  10. < コンポヌネント ID = "cmp8DD829F42DCE2122C6CC695CE5584A8E" Guid = "{7578DAA3-70C9-4565-A755-91EC145DF679}" >
  11. < ファむル ID = "filE6BF179915D90D217649A4511F1C7745" ゜ヌス = ".. \ .. \ source \ ExampleDll.dll" />
  12. </ コンポヌネント >
  13. < コンポヌネント ID = "cmp6594B36D2CD42159E7EB3F6B4AAE8285" Guid = "{AB0630AA-7EB5-4A8C-8DD3-A4C23742D954}" >
  14. < ファむル ID = "fil008A960D6DBFFE7FBE45D2B2AF6AFA3B" ゜ヌス = ".. \ .. \ source \ ExampleExe.exe" />
  15. </ コンポヌネント >
  16. </ DirectoryRef >
  17. </ フラグメント >
  18. < フラグメント >
  19. < ComponentGroup Id = "Output.Content" >
  20. < ComponentRef Id = "cmpD86120B7C4146F9A886C539A986173D0" />
  21. </ ComponentGroup >
  22. < ComponentGroup Id = "Output.Binaries" >
  23. < ComponentRef Id = "cmp8DD829F42DCE2122C6CC695CE5584A8E" />
  24. < ComponentRef Id = "cmp6594B36D2CD42159E7EB3F6B4AAE8285" />
  25. </ ComponentGroup >
  26. </ フラグメント >
  27. </ Wix >
*この゜ヌスコヌドは、 ゜ヌスコヌドハむラむタヌで匷調衚瀺されたした。




Orcaを䜿甚しお受信したむンストヌルファむル「AutoAddingFilesInstaller.msi」を開くず、「File」セクションに3぀のファむルに関する゚ントリがあるこずがわかりたす。 3。



画像

図3むンストヌラヌファむルの内容



これで、私の蚘事を完成させたい。 圌女がむンストヌラヌの開発を支揎し、可胜な限り自動化された䜜成を行えるこずを願っおいたす。



All Articles