рдкреИрдЪрд╡рд┐рдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ Wix рдкрд░ рдкреИрдЪ рдмрдирд╛рдирд╛ред рднрд╛рдЧ реи

рдЫрд╡рд┐
рд╕рднреА рдХреЛ рд╢реБрдн рджрд┐рди! рдЕрдкрдиреЗ рдЖрдЦрд┐рд░реА рд▓реЗрдЦ рдореЗрдВ, рдореИрдВрдиреЗ рдкреИрдЪ рдмрдирд╛рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ Wix ( рдкреИрдЪрд╡рд┐рдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ ) рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рддрдХрдиреАрдХ рдХрд╛ рдЕрд╡рд▓реЛрдХрди рд╢реБрд░реВ рдХрд┐рдпрд╛ред рдЙрд╕реА рдЬрдЧрд╣, рд╣рдо рдЗрд╕ рдирд┐рд╖реНрдХрд░реНрд╖ рдкрд░ рдкрд╣реБрдВрдЪреЗ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдкреВрд░реНрдг рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП "рдХреБрдЫ рдФрд░" рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рднрд╛рдЧ 2 рдореЗрдВ рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ, рдЬрд╣рд╛рдВ рдореИрдВ рд╕рднреА рд╕реНрд░реЛрдд рдХреЛрдб рдХреЗ рд╕рд╛рде рд╣рдорд╛рд░реЗ рд╕рдВрдЧрдардирд╛рддреНрдордХ рдФрд░ рддрдХрдиреАрдХреА рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛ред



рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЕрднреА рднреА рдХрд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдореИрдВ рд╣рдорд╛рд░реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реВрдВ, рдЕрд░реНрдерд╛рддреН рдореЗрд░рд╛ рдЕрдиреБрднрд╡ рдФрд░ рдкрд░рд┐рдгрд╛рдо, рд╣рдардзрд░реНрдорд┐рддрд╛ рдирд╣реАрдВред
рдЗрд╕рд▓рд┐рдП, рдкрд┐рдЫрд▓реА рдмрд╛рд░ рдЗрдВрдЧрд┐рдд рдХреА рдЧрдИ рд╕рднреА рдХрдорд┐рдпреЛрдВ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рд╕реНрдерд╛рдкрдирд╛ рдмрдирд╛рдиреЗ рдХреЗ рдирд┐рдпрдо рдФрд░ рдкреИрдЪ рдмрдирд╛рдиреЗ рдХреА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреА рдереАред

рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╣рдорд╛рд░рд╛ рд╕рдВрдЧрдардирд╛рддреНрдордХ рд╕рдорд╛рдзрд╛рди


рд╣рдордиреЗ рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛: рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдХреЛ рдорд░реНрдЬ рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдЗрдХрдЯреНрдард╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдмреБрдирд┐рдпрд╛рджреА рдЕрд╕реЗрдВрдмрд▓реА (рдЖрдзрд╛рд░ рд░реЗрдЦрд╛) рдХрд╛ рдЪрдпрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдмрд╛рдпрдиреЗрд░рд┐рдЬрд╝ рдХреЗ рд╕рд╛рде рдореЙрдбреНрдпреВрд▓ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдЬреЛ рд╕рднреА рдХреЗ рд▓рд┐рдП рдЕрдирд┐рд╡рд╛рд░реНрдп рд╣реИред рд╡рд╣ рдЙрддреНрдкрд╛рдж рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдЬрд╛ рд░рд╣рд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрджрд┐ рдХреЗрд╡рд▓ рдмрд┐рд▓реНрдб рдирдВрдмрд░ рдмрджрд▓рд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рдПрдХ рдЕрдВрддрд░ рдкреИрдЪ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдореВрд▓ рд╕рдВрд╕реНрдХрд░рдг рдмрд┐рд▓реНрдб рдирдВрдмрд░ = 0 рдХреЗ рд╕рд╛рде рдкрд┐рдЫрд▓рд╛ рд╣реЛрддрд╛ рд╣реИ (рд╣рдо рдЙрдиреНрд╣реЗрдВ рд╕рдВрджрд░реНрдн рдЕрд╕реЗрдВрдмрд▓реА рдХрд╣реЗрдВрдЧреЗ)ред



рд╕рдордп рдЕрдХреНрд╖ рдкрд░ рд╡реГрддреНрдд рдирд┐рд░реНрдорд┐рдд рд╡рд┐рдзрд╛рдирд╕рднрд╛рдУрдВ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред рд╕рдорд░реНрдерди рдЕрд╕реЗрдВрдмрд▓рд┐рдпреЛрдВ рдХреЛ рдиреАрд▓реЗ рд░рдВрдЧ рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрд╕реЗрдВрдмрд▓реА рдЬрд╣рд╛рдВ рд╣рд░реЗ рд░рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдкрд┐рдЫрд▓реА рд╕рдорд░реНрдерди рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдЕрдВрддрд░ рдкреИрдЪ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкрд┐рдЫрд▓реА рд╕рдкреЛрд░реНрдЯ рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЕрд╕реЗрдВрдмрд▓ рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдВрддрд░ рдкреИрдЪ рднреА рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЬрдм рдХреЛрдИ рдЧреНрд░рд╛рд╣рдХ рд╣рдорд╕реЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╣рдо рдЬрд╛рдВрдЪ рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдХреНрдпрд╛ рдЙрд╕рдХреЗ рдкрд╛рд╕ рдЕрднреА рд╕реНрдерд╛рдкрд┐рдд рд╕рдВрд╕реНрдХрд░рдг рд╣реИ рдФрд░ рдЙрд╕рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреНрдпрд╛ рд╣реИред рдЖрдЧреЗ - рдпрд╛ рддреЛ рдкреВрд░реА рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдпрд╛ рдПрдХ рдкреИрдЪ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЕрджреНрдпрддрди рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╛рди рдпреЛрдЬрдирд╛ рдХрд╛рдо рдХрд░рддреА рд╣реИ: рдпрд╛ рддреЛ msi рдпрд╛ msp рдкреИрдХреЗрдЬ рд╕рд░реНрд╡рд░ рд╕реЗ рдЖрддрд╛ рд╣реИ, рдЬреЛ рдорд╛рдирдХ msiexec рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдЗрд╕ рддрдВрддреНрд░ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдорд╛рдзрд╛рди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред

рд╕рдорд╛рдзрд╛рди рдЕрд╡рд▓реЛрдХрди


рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рдорд╛рдзрд╛рди рдХреА рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрд░рдЪрдирд╛ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ (рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рдлрд╝реЛрд▓реНрдбрд░реНрд╕ рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд▓рд┐рдП рдирд╛рдорд┐рдд рдХрд┐рдП рдЧрдП рд╣реИрдВ)ред рдЗрд╕рдХрд╛ рдкреВрд░реНрдг рд╕реНрд░реЛрдд рдХреЛрдб GitHub рдкрд░ рдЕрдкрд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ , рд▓рд┐рдВрдХ рдЕрдВрдд рдореЗрдВ рд╣реИред



рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:
1. рдЖрд╡реЗрджрди рд╣реАред
2. Wix рдХреЗ рд▓рд┐рдП рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╕рд╣рд┐рдд рдкреНрд░рддрд┐рд╖реНрдард╛рдиреЛрдВ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рдлрд╛рдЗрд▓реЗрдВред
3. рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рдиред
4. рдкреИрдЪ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрд┐рддрд╛ред
5. рдЯреЗрд╕реНрдЯ рдХреЗ рд▓рд┐рдП рдмреЙрдбреА рд╢рд░реНрдЯред

рдлрд╝реЛрд▓реНрдбрд░ рд╕рдВрдЦреНрдпрд╛ рдЖрд╡рд╢реНрдпрдХ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдХреНрд░рдо рдХреЛ рджрд░реНрд╢рд╛рддреА рд╣реИред рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред

рдЪрд░рдгреЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВ


рдЪрд░рдг 1. рдПрдХ рдЖрд╡реЗрджрди рд▓рд┐рдЦреЗрдВ

рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдПрдХ рд╕рд░рд▓ рдХрдВрд╕реЛрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реЛрдЧрд╛ "рд╣реИрд▓реЛ, рд╡рд░реНрд▓реНрдб!", рдЬрд┐рд╕рдореЗрдВ рд╣рдо рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдмрджрд▓ рджреЗрдВрдЧреЗред

рдЪрд░рдг 2. рд╣рдо рдкреНрд░рддрд┐рд╖реНрдард╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рднрд╛рдЧреЛрдВ рдХреЛ рд▓рд┐рдЦрддреЗ рд╣реИрдВ

рд╣рдо рдлрд╛рдЗрд▓реЛрдВ рд╕реЗ рдЧреБрдЬрд░рддреЗ рд╣реИрдВ:
Deploy.Variables.wxi рд╕рднреА рдХрдВрдкрдиреА рдкреНрд░рддрд┐рд╖реНрдард╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рдЪрд░ рд╣реИрдВ:
<Include> <?define Manufacturer=""?> <?define ManufacturerUrl="http://company.ru"?> <?define Language="1049"?> <?define Codepage="1251"?> </Include> 
рдпрд╣ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд╣реИ: рд╕рднреА рд╕реНрдерд╛рдкрдирд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЪрд░ рдЗрдВрдЧрд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред

Deploy.Yasen.Variables.wxi - рд╕рднреА рдЙрддреНрдкрд╛рдж рд╕реНрдерд╛рдкрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдорд╛рдиреНрдп Wix рдлрд╝рд╛рдЗрд▓:
 <Include> <?define ProductName="" ?> <?define YasenProductCode="{06CABA42-492E-49CE-9849-F85E87442E99}"?> <?define YasenUpgradeCode="{BA8CCE3C-4267-4291-B330-16EE510F023B}"?> </Include> 
рд╣рдо рдпрд╣рд╛рдВ рдЙрддреНрдкрд╛рдж рдХреЛрдб рдФрд░ рдЕрдкрдбреЗрдЯ рдХреА рдЕрд▓рдЧ-рдЕрд▓рдЧ рд░рд┐рдкреЛрд░реНрдЯрд┐рдВрдЧ рдХреНрдпреЛрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ? рдХреНрдпреЛрдВрдХрд┐ рддрдм рд╣рдореЗрдВ рдХрдИ рд╕реНрдерд╛рдиреЛрдВ рдкрд░ (рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕реНрдерд╛рдкрдирд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдФрд░ рдкреИрдЪ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдореЗрдВ) рдЙрдирдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

Deploy.Yasen.ProductContent.wxi рд╡рд┐рднрд┐рдиреНрди рд╕рдВрд╕реНрдерд╛рдкрди рдЧреБрдгреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд╛рдЭрд╛ рдлрд╝рд╛рдЗрд▓ рд╣реИред
 <Include> <Package Id="$(var.PackageId)" InstallerVersion="200" Compressed="yes" Languages="$(var.Language)" SummaryCodepage="$(var.Codepage)" Comments=" $(var.ProductName)" Keywords=", , , , , " Description="$(var.Subject)" InstallScope="perMachine" /> <!--    --> <Property Id="MSIUSEREALADMINDETECTION" Value="1" /> <MajorUpgrade DowngradeErrorMessage ="     " AllowDowngrades="no" /> <Upgrade Id='$(var.UpgradeCode)' > <UpgradeVersion OnlyDetect="no" Maximum="$(var.ProductVersion)" IncludeMaximum="no" Property="OLDERVERSIONBEINGUPGRADED" MigrateFeatures="yes" /> </Upgrade> <!-- Media --> <Media Id="1" Cabinet="media1.cab" EmbedCab="yes" /> </Include> 

рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, рд╣рдо рдЕрдВрдд рдореЗрдВ рдкрд┐рдЫрд▓реА рдлрд╝рд╛рдЗрд▓реЛрдВ рд╕реЗ рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ (рд╡реЗ рдмрд╛рдж рдореЗрдВ рдпрд╣рд╛рдВ рдЙрдкрд▓рдмреНрдз рд╣реЛрдВрдЧреЗ рдЬрдм рд╣рдо рдореБрдЦреНрдп рд╕реНрдерд╛рдкрдирд╛ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдВрдЧреЗ)ред рдЖрд╡рд╢реНрдпрдХ рдореАрдбрд┐рдпрд╛ рддрддреНрд╡ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реИ рдФрд░ рдХрдИ рдЕрддрд┐рд░рд┐рдХреНрдд (рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдЕрдкрдбреЗрдЯ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд) рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реИрдВ:



рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, UpgradVersion рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рддрд╛рдХрд┐ рд╣рдорд╛рд░реЗ UpgradCode рдХреЗ рднреАрддрд░ рд╕рднреА рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЛ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛред

рд╣рдо рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВ: Deploy.Yasen.PatchCreation.xml - рдЗрд╕ рдЙрддреНрдкрд╛рдж рдХреЗ рд▓рд┐рдП рдкреИрдЪ рд╡рд┐рд╡рд░рдгрдХред
 <Include xmlns="http://schemas.microsoft.com/wix/2006/wi"> <?include Deploy.Variables.wxi?> <?include Deploy.Yasen.Variables.wxi?> <?define PatchDescription=" $(var.ProductName)"?> <PatchCreation Id="$(var.PatchId)" Codepage="$(var.Codepage)" CleanWorkingFolder="yes" OutputPath="patch.pcp" WholeFilesOnly="yes" > <PatchInformation Description="$(var.PatchDescription)" Comments="$(var.PatchDescription)" Manufacturer="$(var.Manufacturer)"/> <PatchMetadata AllowRemoval="yes" Description="$(var.PatchDescription)" ManufacturerName="$(var.Manufacturer)" TargetProductName="$(var.ProductName)" MoreInfoURL="$(var.ManufacturerUrl)" Classification="Update" DisplayName="$(var.PatchDescription)   $(var.PatchVersion)"/> <Family DiskId="2" Name="$(var.Family)" SequenceStart="5000" > <UpgradeImage SourceFile="$(var.NewMsi)" Id="NewPackage" > <TargetImage SourceFile="$(var.BaseMsi)" Order="2" Id="BasePackage" IgnoreMissingFiles="no" Validation = "0x00000912" /> </UpgradeImage> </Family> <PatchSequence PatchFamily="$(var.PatchFamily)" Sequence="$(var.PatchVersion)" Supersede="yes" ProductCode="$(var.ProductCode)"/> </PatchCreation> </Include> 
рд╣рдордиреЗ рднрд╛рдЧ 1 рдореЗрдВ рдкрд░реНрдпрд╛рдкреНрдд рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдкреИрдЪрдХреНрд░рд┐рдПрд╢рди рд╕рдВрд░рдЪрдирд╛ рдХреА рдЬрд╛рдВрдЪ рдХреА ред рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдЖрдк рдХрдо рд╕реЗ рдХрдо 2 рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЕрдВрддрд░ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:


рдФрд░ рдЪрд░рдг 2 рдореЗрдВ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд Incom.WixExtensions рдкреНрд░реЛрдЬреЗрдХреНрдЯ (рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ) рд╣реИред рдпрд╣ Wix рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рд╕рд╛рде рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реИред рдпрд╣ рддрд╛рд░реНрдХрд┐рдХ рд░реВрдк рд╕реЗ рдпрд╣реАрдВ рдореМрдЬреВрдж рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЪрд░рдг 3 рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

рдЪрд░рдг 3. рд╣рдо рдХреБрдЫ рдЧреНрд░рд╛рд╣рдХ рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рдкрдирд╛ рдПрдХрддреНрд░ рдХрд░рддреЗ рд╣реИрдВ

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, Wix рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЙрди рдЪрд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдордиреЗ рдкрд╣рд▓реЗ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдерд╛ред
  <?define WixCommonPath="$(var.ProjectDir)..\"?> <?include $(var.WixCommonPath)\Deploy.Variables.wxi?> <?include $(var.WixCommonPath)\Deploy.Yasen.Variables.wxi?> 

рдлрд┐рд░ рд╣рдо рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рд╕рдВрд╕реНрдХрд░рдг рдФрд░ рд╡рд░реНрддрдорд╛рди рдЙрддреНрдкрд╛рдж рдХреЛрдб рдФрд░ рдЕрдкрдбреЗрдЯ рд▓рд╛рдЗрди рдХреА рдШреЛрд╖рдгрд╛ рдХрд░реЗрдВрдЧреЗред
  <?define Subject=" "?> <?define ProductVersion="$(incom.FileVersion($(var.Yasen.UI.TargetPath)))"?> <?define UpgradeCode="$(var.YasenUpgradeCode)"?> <?define ProductCode="$(incom.ChangeGuid($(var.YasenProductCode),$(var.ProductVersion), 2))"?> 

рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ UpgradCode рдХрд╛ рдЙрдкрдпреЛрдЧ "рдЬреИрд╕рд╛ рд╣реИ" рдФрд░ рдЙрддреНрдкрд╛рдж рдХреЛрдб рдореЗрдВ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рд░реВрдкрд╛рдВрддрд░рдг рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред
рдЗрд╕ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рдХреНрд╖реНрдп рдХреЗ рд▓рд┐рдП рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ: рдмрд┐рд▓реНрдб рдирдВрдмрд░ рдмрджрд▓рддреЗ рд╕рдордп , рдЙрддреНрдкрд╛рдж рдХреЛрдб рдирд╣реАрдВ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рдПрдХ рдЕрдВрддрд░ рдкреИрдЪ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХреЗ, рдФрд░ рдореЗрдЬрд░ рдпрд╛ рдорд╛рдЗрдирд░ рд╕рдВрд╕реНрдХрд░рдг рдмрджрд▓рддреЗ рд╕рдордп, рдЙрддреНрдкрд╛рдж рдХреЛрдб рдХреЛ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП (рдпрд╣ рдкрд╣рд▓реЗ рднрд╛рдЧ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдерд╛)ред рддрджрдиреБрд╕рд╛рд░, рд╣рдо рдирд┐рдореНрди рдХрд╛рд░реНрдп рдХрд░рддреЗ рд╣реИрдВ: рд╣рдо рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рд╕реЗ рдЙрддреНрдкрд╛рдж рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд░реВрдкрд╛рдВрддрд░рдг рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рдпрд╣ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рдЕрдВрддрд┐рдо рд╕рдВрд╕реНрдХрд░рдг рдХрд┐рд╕ рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, 1 - рдХреЗрд╡рд▓ рдкреНрд░рдореБрдЦ рд╕реЗ , 2 - рдкреНрд░рдореБрдЦ рдФрд░ рдорд╛рдореВрд▓реА рд╕реЗ , рдФрд░ рдлрд┐рд░ рд╕рд╛рджреГрд╢реНрдп рджреНрд╡рд╛рд░рд╛ 4 рдХреЗ рдореВрд▓реНрдп рддрдХред

рдпрд╣ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд Wix рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рд╕рдордп рд╣реИред
рдЪреВрдВрдХрд┐ рдЗрд╕ рд▓реЗрдЦ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп Wix рдХреЗ рд▓рд┐рдП рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдмрдирд╛рдиреЗ рдХреА рддрдХрдиреАрдХ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдирд╛ рдирд╣реАрдВ рд╣реИ (рдЖрдк рдЗрд╕реЗ рдпрд╣рд╛рдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ), рдореИрдВ рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╕рд╛рд░рд╛рдВрд╢ рджреВрдВрдЧрд╛: рдПрдХ рдореВрд▓реНрдпрд╛рдВрдХрди рдХреЗ рд▓рд┐рдП рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдкреБрдирд░реНрдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╕рдЯреАрдХ рдЙрдкрд╕рд░реНрдЧ рдХреЗ рд╕рд╛рде рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдЗрд╕реЗ рд╡рд┐рдХреНрд╕ рджреНрд╡рд╛рд░рд╛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЗрд╕ рд╡рд┐рдзрд┐ рдореЗрдВ, рд╣рдо 2 рдХрд╛рд░реНрдп рдХрд░рддреЗ рд╣реИрдВ:
тАв рдлрд╝рд╛рдЗрд▓ рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛
тАв рдпреВрдирд┐рд╡рд░реНрд╕рд▓ рдЧрд╛рдЗрдб рдЪреЗрдВрдЬ рдлрдВрдХреНрд╢рди

рдлрд╝рдВрдХреНрд╢рди рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП Wix рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ
 /// <summary> ///   /// </summary> /// <param name="prefix"></param> /// <param name="function"> </param> /// <param name="args"></param> /// <returns> </returns> public override string EvaluateFunction(string prefix, string function, string[] args) { if (prefix == "incom") { switch (function.ToLower()) { case "fileversion": var ver = FileVersionInfo.GetVersionInfo(Path.GetFullPath(args[0])).FileVersion; Console.WriteLine(string.Format("Version of {0}: {1}", args[0], ver)); return ver; case "changeguid": var guid = Guid.Parse(args[0]).ToByteArray(); version = Version.Parse(args[1]); var major = BitConverter.GetBytes((Int16)((version.Major & 0xFF) ^ ((version.Major >> 16) & 0xFF))); var minor = BitConverter.GetBytes((Int16)((version.Minor & 0xFF) ^ ((version.Minor >> 16) & 0xFF))); var build = BitConverter.GetBytes((Int16)((version.Build & 0xFF) ^ ((version.Build >> 16) & 0xFF))); var revision = BitConverter.GetBytes((Int16)((version.Revision & 0xFF) ^ ((version.Revision >> 16) & 0xFF))); var len = 4; if (args.Length > 2) len = int.Parse(args[2]); if (len > 0) { guid[0] = major[0]; guid[1] = major[1]; } if (len > 1) { guid[2] = minor[0]; guid[3] = minor[1]; } if (len > 2) { guid[4] = build[0]; guid[5] = build[1]; } if (len > 3) { guid[6] = revision[0]; guid[7] = revision[1]; } return new Guid(guid).ToString(); } } return base.EvaluateFunction(prefix, function, args); } 


рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдорд╛рд░реЗ рдХреЛрдб рдЕрдиреБрдорд╛рдирд┐рдд рд░реВрдк рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрддреНрдкрд╛рдж рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реИрдВред рдЬрдм рд╣рдо рдХреЛрдб рдХреЛ рдереЛрдбрд╝рд╛ рдмрджрд▓ рджреЗрддреЗ рд╣реИрдВ - рд╣рдо рд╕рдВрджрд░реНрдн рдЕрд╕реЗрдВрдмрд▓реА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдб рдирдВрдмрд░ (рдкреНрд░рддреНрдпреЗрдХ 2-3 рд╕рдкреНрддрд╛рд╣ рдореЗрдВ рдПрдХ рдмрд╛рд░), рдХреБрдЫ рдФрд░ рдЕрдзрд┐рдХ рдЧрдВрднреАрд░ - рдорд╛рдЗрдирд░ рд╕рдВрдЦреНрдпрд╛ (рд▓рдЧрднрдЧ 2-3 рдмрд╛рд░ рдПрдХ рдмрд╛рд░) рдмрджрд▓ рджреЗрддреЗ рд╣реИрдВред рдЬрдм рд╕рдм рдХреБрдЫ рдкрддреНрд░рд╛рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдореЗрдЬрд░ рдирдВрдмрд░ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ (рд▓рдЧрднрдЧ рд╣рд░ 3-4 рд╕рд╛рд▓ рдореЗрдВ рдПрдХ рдмрд╛рд░)ред

рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕рдм рдХреБрдЫ рдорд╛рдирдХ рд╣реИ: рдКрдкрд░ рдШреЛрд╖рд┐рдд рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЙрддреНрдкрд╛рдж рдмреНрд▓реЙрдХ рдмрдирд╛рдПрдВ, рдлрд╝рд╛рдЗрд▓реЛрдВ, рдШрдЯрдХреЛрдВ, рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ, рдкрд┐рдЫрд▓реЗ рдЪрд░рдг рдореЗрдВ рд╡рд░реНрдгрд┐рдд Deploy.Yasen.ProductContent рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
 <Product Id="$(var.ProductCode)" Name="$(var.ProductName)" Language="$(var.Language)" Version="$(var.ProductVersion)" Manufacturer="$(var.Manufacturer)" UpgradeCode="$(var.UpgradeCode)" > <?include $(var.WixCommonPath)\Deploy.Yasen.ProductContent.wxi?> <Directory Id="TARGETDIR" Name="SourceDir"> <Directory Id="ProgramFilesFolder"> <Directory Id="APPLICATIONFOLDER" Name="$(var.ProductName)" DiskId="1" > <!-- Content --> <Component Id="Component1" Guid="{1F4A6EF3-4B65-4405-8E08-D750E5038C75}"> <File Id="File1" Name="content.txt" Source="..\..\Incom.Yasen.Content\content.txt"/> <File Id="File2" Name="Yasen.UI.exe" Source="$(var.Yasen.UI.TargetPath)"/> </Component> </Directory> </Directory> </Directory> <Feature Id="ClientSide" Title=" $(var.ProductName)" Level="1" Absent="disallow"> <ComponentRef Id="Component1"/> </Feature> </Product> 

рдЪрд░рдг 4. рдПрдХ рдкреИрдЪ рдмрдирд╛рдирд╛

рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрдкрдиреЗ рдЙрддреНрдкрд╛рдж рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рдм рдХреБрдЫ рд╣реИ рдФрд░ рдпрд╣ рднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдорд╛рд░рд╛ рд▓рдХреНрд╖реНрдп рдкреИрдЪ рд╣реИред
рдЬреИрд╕рд╛ рдХрд┐ рднрд╛рдЧ 1 рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╕реЗ рдкреИрдЪ рдмрдирд╛рдирд╛ рдХрд╛рдлреА рдкрд░реЗрд╢рд╛рдиреА рднрд░рд╛ рд╣реЛрддрд╛ рд╣реИ , рдЗрд╕рд▓рд┐рдП рдЗрд╕ рдЪрд░рдг рдореЗрдВ рд╣рдо рдПрдХ рдирдИ рдЙрдкрдпреЛрдЧрд┐рддрд╛ MakeMsp рд▓рд┐рдЦрддреЗ рд╣реИрдВ , рдЬреЛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЗрди рдЪрд░рдгреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рддреА рд╣реИред рдЙрдкрдпреЛрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реЛрдВрдЧреА: рддрд░реНрдХ рдЖрдзрд╛рд░ рд╡рд┐рдзрд╛рдирд╕рднрд╛, рдЕрдВрддрд┐рдо рд╡рд┐рдзрд╛рдирд╕рднрд╛, рдкреИрдЪ рд╡рд┐рд╡рд░рдгрдХ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХреЗ рдкрде рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВред
 Incom.MakeMsp.exe "YasenSetup1.msi" "YasenSetup1.0.1.msi" "Deploy.Yasen.PatchCreation.xml" "Patch.msp" 

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
1. рджреЛрдиреЛрдВ рдПрдордПрд╕рдЖрдИ рдХреЛ рдПрдХ рдЕрд╕реНрдерд╛рдпреА рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдХреЙрдкреА рдХрд░реЗрдВ
рдХреЛрдб рдХрд╛ рдЯреБрдХрдбрд╝рд╛
 Task.WaitAll( Task.Run( () => { Console.WriteLine("Start copying RTM..."); File.Copy(args[0], rtmFilePath, true); Console.WriteLine("Finished copying RTM..."); }) , Task.Run( () => { Console.WriteLine("Start copying latest..."); File.Copy(args[1], latestFilePath, true); Console.WriteLine("Finished copying latest..."); })); 


2. рдпрд╛рдж рд░рдЦреЗрдВ, рдЪрд░рдг 2 рдореЗрдВ, рдкреИрдЪрдХреНрд░рд┐рдПрдЯ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╕рдордп , рд╣рдордиреЗ рдЕрдЬреНрдЮрд╛рдд рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдерд╛? рдЙрдиреНрд╣реЗрдВ рдкрд╣рдЪрд╛рдирдиреЗ рдХрд╛ рд╕рдордп рдЖ рдЧрдпрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдПрдХ Wix рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдЕрд╕реНрдерд╛рдпреА рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рддреА рд╣реИ, рдЬрд╣рд╛рдБ рдЗрди рдЪрд░реЛрдВ рдХреЗ рдорд╛рди рд▓рд┐рдЦреЗ рдЬрд╛рддреЗ рд╣реИрдВред
рдПрдХ рдкреИрдЪ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЪрд░ рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХрд╛ рдПрдХ рдЯреБрдХрдбрд╝рд╛
 var productName = MsiReader.GetMSIParameters(latestFilePath, "ProductName"); var wixPachCreationReference = string.Format( @"<?xml version=""1.0"" encoding=""utf-8""?> <Wix xmlns='http://schemas.microsoft.com/wix/2006/wi'> <?define Family='{0}'?> <?define PatchFamily='{0}'?> <?define PatchId='{1}'?> <?define ProductCode='{2}'?> <?define PatchVersion='{3}'?> <?define BaseMsi='{4}'?> <?define NewMsi='{5}'?> <?include {6}?> </Wix>", new string(Transliterate(productName).Where(char.IsLetterOrDigit).Take(8).ToArray()), Guid.NewGuid().ToString(), MsiReader.GetMSIParameters(latestFilePath, "ProductCode"), MsiReader.GetMSIParameters(latestFilePath, "ProductVersion"), Path.Combine(rtmPath, "rtm.msi"), Path.Combine(latesPath, "last.msi"), Path.GetFullPath(args[2]) ); 


рд▓рд┐рдкреНрдпрдВрддрд░рдг рдХреЗ рд╕рд╛рде рдЙрддреНрдкрд╛рдж рдХрд╛ рдирд╛рдо рдкреИрдЪрдлрд╝реИрдорд┐рд▓реА рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреИрдЪрдЖрдИрдб рдирдпрд╛ рдЧрд╛рдЗрдб рд╣реИред ProductCode , PatchVersion - рдЕрдВрддрд┐рдо msi , BaseMsi рдФрд░ NewMsi рд╕реЗ рдирд┐рдХрд╛рд▓рд╛ рдЧрдпрд╛ - рдЕрд╕реНрдерд╛рдпреА msi рдХрд╛ рдкрде (рдПрдХ рдЕрд╕реНрдерд╛рдпреА рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЧрдпрд╛)ред рдЕрдВрдд рдореЗрдВ, рдкреИрдЪрдХреНрд░рд┐рдПрд╢рди рдХреЗ рд╕рд╛рде рдлрд╛рдЗрд▓ рдкрд░ рд╣реА рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ ред

3. рдЗрд╕рдХреЗ рдмрд╛рдж, рднрд╛рдЧ 1 рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╕рдВрдХрд▓рди рдЪрд░рдгреЛрдВ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдкреНрд░рд╢рд╛рд╕рдирд┐рдХ рд╕реНрдерд╛рдкрдирд╛:
 exec("msiexec", string.Format("/a \"{0}\" /qn TARGETDIR=\"{1}\\\"", rtmFilePath, rtmPath)); exec("msiexec", string.Format("/a \"{0}\" /qn TARGETDIR=\"{1}\\\"", latestFilePath, latesPath)); 

рд╕рдВрдХрд▓рди рдФрд░ рдПрдХ рдкреИрдЪ рдмрдирд╛рдирд╛:
 exec("candle", string.Format("\"{0}\" -out \"{1}\\patch.wixobj\"", Path.Combine(tempDir, "desc.xml"), tempDir)); exec("light", string.Format("\"{0}\\patch.wixobj\" -out \"{0}\\patch.pcp\"", tempDir)); exec("msimsp", string.Format("-s \"{0}\\patch.pcp\" -p \"{1}\" -l \"{0}\\msimsp.log\"", tempDir, args[3])); 

рдЪрд░рдг 5. рд╕рдм рдХреБрдЫ рдФрд░ рд╕рдм рдХреБрдЫ рдХрд╛ рд╕рдВрдХрд▓рди

рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рдм рдХреБрдЫ рд╣реИ рдЬреЛ рд╣рдореЗрдВ рдЪрд╛рд╣рд┐рдП: рдПрдХ рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдкреНрд░реЛрдЬреЗрдХреНрдЯ, Wix рдХреЗ рд▓рд┐рдП рдПрдХреНрд╕рдЯреЗрдВрд╢рди, рдПрдХ рдкреИрдЪ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░, рдПрдХ рдкреИрдЪ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдпреЛрдЧрд┐рддрд╛ред рдпрд╣ рд╕рдм рдПрдХ рд╕рд╛рде рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИред
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рдорд╛рдзрд╛рди рдХреЗ рдореВрд▓ рдореЗрдВ рдПрдХ CompileAll.bat рдлрд╝рд╛рдЗрд▓ рд╣реИ, рдЬреЛ рдЗрд╕реЗ рд╕рднреА рдХреЛ рдПрдХ рд╕рд╛рде рд░рдЦреЗрдЧреА ( рд░реВрдкрд░реЗрдЦрд╛ 4.0 рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ) рдФрд░ рдкрд░рд┐рдгрд╛рдо рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдбрд╛рд▓реЗрдВред рдЖрдк рд╕реНрд░реЛрдд рдореЗрдВ рдпрд╣ рд╕рдм рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред

рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛


CompileAll.bat рдЪрд▓рд╛рдиреЗ рдХреЗ рдмрд╛рдж рдкрд░рд┐рдгрд╛рдоред



рдкреИрдЪ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ

рдЖрдк рдХреЗрд╡рд▓ DblClick рджреНрд╡рд╛рд░рд╛ рд╕рдВрд╕реНрдХрд░рдг 1 рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдкрд░рд┐рдгрд╛рдо:


рдЖрдк DblClick рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдкреИрдЪ рднреА рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:


рд╕реНрдерд╛рдкрд┐рдд рдЕрджреНрдпрддрди рджреЗрдЦрдиреЗ рд╕реЗ рдпрд╣ рдкрддрд╛ рдЪрд▓реЗрдЧрд╛:


рдкреВрд░реНрдг рдкреИрдХ рдЕрджреНрдпрддрди

рдЕрдЧрд░ рд╣рдореЗрдВ рдкреВрд░реНрдг msi рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП 1.0.0 рд╕реЗ 1.0.1 рддрдХ рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдХрдВрд╕реЛрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:

 msiexec /i YasenSetup1.0.1.msi REINSTALL=ALL REINSTALLMODE=vomus 

рдпрд╣рд╛рдВ:
рдЕрджреНрдпрддрди - рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЕрджреНрдпрддрди рдХреЗ рджреМрд░рд╛рди рдЗрд╕ рдкреИрдХреЗрдЬ рджреНрд╡рд╛рд░рд╛ рдХреМрди рд╕реА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ (рд╣рдо рд╕рдВрдХреЗрдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╕рднреА)ред рдпрджрд┐ рд╣рдо рдЗрд╕ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЬрдм рдЖрдк рдкреИрдХреЗрдЬ (рдФрд░ рд╕реНрдерд╛рдкрд┐рдд рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдг) рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕рдВрджреЗрд╢ "рдПрдХ рдФрд░ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред" ( рд╡рд┐рд╡рд░рдг )
REINSTALLMODE - рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдЬреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреА рд╣реИ рдХрд┐ рдлрд╛рдЗрд▓реЛрдВ рдХрд╛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрдирд╛ (рдЕрдкрдбреЗрдЯ) рдХреИрд╕реЗ рд╣реЛрдЧрд╛ред ( рд╡рд┐рд╡рд░рдг )ред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рд╣реИ:
v - рдЖрдкрдХреЛ рд╕реНрдерд╛рдиреАрдп рднрдВрдбрд╛рд░рдг рдореЗрдВ рдкреИрдХреЗрдЬ рдХреЛ рдХреИрд╢ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдЙрддреНрдкрд╛рдж ( ProductCode ) рдХреЗ рд▓рд┐рдП, Windows рдХреЛ рдкреИрдХреЗрдЬ рдХрд╛ рдорд╛рди рдпрд╛рдж рд╣реИред рдЬрд╣рд╛рдВ рд╕реЗ рдЙрддреНрдкрд╛рдж рд╡рд┐рддрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдпрджрд┐ рдЙрддреНрдкрд╛рдж рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реНрдерд╛рдкрд┐рдд рд╣реИ рдФрд░ рд╕рд╛рдордЧреНрд░реА рдФрд░ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рднреА рдПрдХ рд╕рдорд╛рди рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдЕрд▓рдЧ рдкреИрдХреЗрдЬ рдХреЗ рд╕рд╛рдеред (рд╕рд┐рд░реНрдл рд╕рдорд╛рдзрд╛рди рдХрд╛ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг), рддреЛ рдкреИрдХреЗрдЬ рдХрд╛ рдХреИрд╢реНрдб рдорд╛рдиред рдкреИрдХреЗрдЬ рдХреЗ рдкреИрдХреЗрдЬ рд╕реЗ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рдПрдЧрд╛ ред рдирдИ рд╕реНрдерд╛рдкрдирд╛ рдХрд╛ рдЪреЗрддрд╛рд╡рдиреА рдФрд░ рдЪреЗрддрд╛рд╡рдиреА рдЬрд╛рд░реА рдХреА рдЬрд╛рдПрдЧреА рдХрд┐ рдпрд╣ рд╕реНрдерд╛рдкрд┐рдд рд╣реИ рдПрдХ рдФрд░ рд╕рдВрд╕реНрдХрд░рдгред рдПрдХ v рдХреЗ рд╕рд╛рде, Package.Id рдЕрдиреБрдкрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдирд╣реАрдВ рдХреА рдЬрд╛рдПрдЧреАред
рдпрджрд┐ рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг рдирдП рд╕реЗ рдХрдо рд╣реИ рдпрд╛ рдлрд╛рдЗрд▓ рдЧрд╛рдпрдм рд╣реИ, рддреЛ o - рдлрд╛рдЗрд▓ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦреЗрдВред
m - рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдХреБрдВрдЬрд┐рдпрд╛рдБ рдЕрдзрд┐рд▓реЗрдЦрд┐рдд рдХрд░реЗрдВ ( HKEY_LOCAL_MACHINE рдФрд░ HKEY_CLASSES_ROOT )
рдпреВ - рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдХреБрдВрдЬреА рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд░рддрд╛ рд╣реИ ( HKEY_CURRENT_USER рдФрд░ HKEY_USERS )
s - рд╕рднреА рд╢реЙрд░реНрдЯрдХрдЯреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рдФрд░ рдЖрдЗрдХрди рдХреИрд╢ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ред

рдЗрд╕ рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЕрджреНрдпрддрди рд╡рд┐рдзрд┐ рд╕реЗ рдмрдЪрдиреЗ рдФрд░ рдХреЗрд╡рд▓ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП DblClick рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдПрдХ рдФрд░ рдХрд╣рд╛рдиреА рд╣реИред

рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдХрд╣рдирд╛


рдЗрд╕рд▓рд┐рдП, рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрджрдо рдЙрдард╛рдП рдЧрдП:
1) рдЕрдВрддрд┐рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП Wix рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ рд╡рд┐рдХрд╕рд┐рдд рдХреА рдЧрдИ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:
рдПрдХред рд╕рд╛рдЭрд╛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рд╕рдм рдХреБрдЫ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓реЗрдВ , рдореЙрдбреНрдпреВрд▓ рдорд░реНрдЬ рдХрд░реЗрдВ рдФрд░ рд╢рд╛рдорд┐рд▓ рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
рдЦред рдмреЗрд╕ рд╡реИрд▓реНрдпреВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ Product.ProductCode рдЬрдирд░реЗрдЯ рдХрд░реЗрдВред
2) рдкреИрдЪ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВред
3) рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдмрдирд╛рдПрдВ рдЬреЛ рдкреИрдЪ рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧреАред

рдЕрдВрддрд┐рдо рдкрд░рд┐рдгрд╛рдо


рд╡рд┐рдХреНрд╕ рдПрдХ рдмрдбрд╝реЗ рд╕рд┐рд░рджрд░реНрдж рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рджред
рдмреЗрд╢рдХ, рдХреБрдЫ рдЪреАрдЬреЗрдВ рдЫрд╛рдпрд╛ рдореЗрдВ рдмрдиреА рд╣реБрдИ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдФрд░ рдореВрд▓реНрдпрд╡рд╛рди рдкрд╛рдардХ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдЖрдкрдХрд╛ рдзрдиреНрдпрд╡рд╛рдж

рд╕рдВрджрд░реНрдн:
GitHub рдкрд░ рд╕рднреА рд╕реНрд░реЛрдд

Source: https://habr.com/ru/post/In190654/


All Articles