
рд╕рднреА рдХреЛ рд╢реБрдн рджрд┐рди! рдЕрдкрдиреЗ
рдЖрдЦрд┐рд░реА рд▓реЗрдЦ рдореЗрдВ, рдореИрдВрдиреЗ рдкреИрдЪ рдмрдирд╛рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ 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 Id="1" Cabinet="media1.cab" EmbedCab="yes" /> </Include>
рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, рд╣рдо рдЕрдВрдд рдореЗрдВ рдкрд┐рдЫрд▓реА рдлрд╝рд╛рдЗрд▓реЛрдВ рд╕реЗ рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ (рд╡реЗ рдмрд╛рдж рдореЗрдВ рдпрд╣рд╛рдВ рдЙрдкрд▓рдмреНрдз рд╣реЛрдВрдЧреЗ рдЬрдм рд╣рдо рдореБрдЦреНрдп рд╕реНрдерд╛рдкрдирд╛ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдВрдЧреЗ)ред рдЖрд╡рд╢реНрдпрдХ
рдореАрдбрд┐рдпрд╛ рддрддреНрд╡ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реИ рдФрд░ рдХрдИ рдЕрддрд┐рд░рд┐рдХреНрдд (рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдЕрдкрдбреЗрдЯ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд) рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реИрдВ:
- MSIUSEREALADMINDETECTION - рдпрджрд┐ = 1 рд╣реИ, рддреЛ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдХреЗ рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ (UAC рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ)ред
- рдореЗрдЬрд░рдЕрдкрдЧреНрд░реЗрдб рддрддреНрд╡ - рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореЗрдЬрд░ рдЕрдкрдЧреНрд░реЗрдб рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ - рдирдП рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИ рдФрд░ рдкреБрд░рд╛рдиреЗ рд╡рд╛рд▓реЗ рдХреЛ рд░реЛрд▓рдмреИрдХ рдирд┐рд╖рд┐рджреНрдз рд╣реИред
- рдПрд▓рд┐рдореЗрдВрдЯ рдЕрдкрдЧреНрд░реЗрдб - рдЗрд╕рдореЗрдВ рд╕рдВрднрд╛рд╡рд┐рдд рдЕрдкрдбреЗрдЯ рдХрд╛ рд╡рд┐рд╡рд░рдг рд╣реЛрддрд╛ рд╣реИред
- UpgradVersion рддрддреНрд╡ рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ ( UpgradCode рджреНрд╡рд╛рд░рд╛) рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдФрд░ рдЙрдирдХреА рдкрд╣рдЪрд╛рди рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рд▓рд┐рдП рд╢рд░реНрддреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред рд╕рдВрднрд╛рд╡рд┐рдд рд╡рд┐рдХрд▓реНрдк (рдореИрдВ рд╕рднреА рдирд╣реАрдВ рджреЗрддрд╛):
рдиреНрдпреВрдирддрдо - рдиреНрдпреВрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдЬрд┐рд╕реЗ рдпрд╣ рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдЕрдкрдбреЗрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдЕрдзрд┐рдХрддрдо - рдЕрдзрд┐рдХрддрдо рд╕рдВрд╕реНрдХрд░рдг рдЬрд┐рд╕реЗ рдпрд╣ рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдЕрдкрдбреЗрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдореИрдХреНрд╕рд┐рдордо рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ - "рд╕рдорд╛рд╡реЗрд╢реА" рдЕрдзрд┐рдХрддрдо рд╕рдВрд╕реНрдХрд░рдг (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ - рд╣рд╛рдВ)ред
рдиреНрдпреВрдирддрдо рд╢рд╛рдорд┐рд▓ - "рд╕рдорд╛рд╡реЗрд╢реА" рдиреНрдпреВрдирддрдо рд╕рдВрд╕реНрдХрд░рдгред
рд╕рдВрдкрддреНрддрд┐ - рдореЗрдВ рдХреБрдЫ рдЪрд░ рдХрд╛ рдирд╛рдо рд╣реЛрддрд╛ рд╣реИред рдпрджрд┐ рд╕рдВрдХреЗрддрд┐рдд рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдкрд░ рд╕рдВрдмрдВрдзрд┐рдд рдЙрддреНрдкрд╛рдж рдкрд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдЙрдирдХреЗ рдХреЛрдб 'рдЗрд╕' рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрд╕ рдЪрд░ рдХреЛ рд▓рд┐рдЦреЗ рдЬрд╛рдПрдВрдЧреЗред рдЗрд╕ рдЪрд░ рдХреЗ рдорд╛рди рдмрд╛рдж рдореЗрдВ рднрд╛рдЧ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм CustomAction рдкреНрд░рджрд░реНрд╢рди рдХрд░рддреЗ рд╣реИрдВред
OnlyDetect - рдпрджрд┐ = ' рд╣рд╛рдВ ' рд╣реИ, рддреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЛ рдХреЗрд╡рд▓ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧреБрдгреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рдФрд░ рд▓рд┐рдЦрд╛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рд╡реЗ рдЕрдирдЗрдВрд╕реНрдЯреЙрд▓ рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред
IgnoreRemoveFailure - рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдкрддрд╛ рд╕рдВрд╕реНрдХрд░рдг рдХреА рд╕реНрдерд╛рдкрдирд╛ рд░рджреНрдж рдХрд░рддреЗ рд╕рдордп рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рдирд╛ рд╣реИред
рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ,
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 рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЕрдВрддрд░ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:
- TargetImage рддрддреНрд╡ рдкрд░ рдорд╛рдиреНрдпрддрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛ред рдпрд╣ рд╡рд╣ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ рдЬреЛ рд╣рдореЗрдВ рд▓рдВрдШрди рдкреИрдЪ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд░реНрдгрди рдпрд╣рд╛рдБ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ред рдЗрд╕рд▓рд┐рдП, рдХрдИ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЖрдорддреМрд░ рдкрд░ рдЙрдирдореЗрдВ рд╕реЗ рд╕рднреА рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ ( рдЯрд╛рд░рдЧреЗрдЯрдЗрдореЗрдЬ рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде), рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ рдкреИрдЪ рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рдмрдврд╝рд╛рддрд╛ рд╣реИред рд╣рдорд╛рд░реА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдФрд░ рд╕рдВрдЧрдардирд╛рддреНрдордХ рдЙрдкрд╛рдпреЛрдВ (рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд) рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП, рд╣рдо рдХреЗрд╡рд▓ 912 рдХреЗ рдорд╛рди рдХреЗ рд╕рд╛рде рдкрд┐рдЫрд▓реЗ рд╕рдорд░реНрдерди рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдФрд░ рд╕рддреНрдпрд╛рдкрди рдзреНрд╡рдЬ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реЗред рдпрд╣ рдорд╛рди рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╕реНрдерд╛рдкрд┐рдд рдЙрддреНрдкрд╛рдж рдореЗрдВ рдкреИрдЪ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╢рд░реНрдд рдкреВрд░реА рдХрд░рдиреА рд╣реЛрдЧреА: UpgradCode , ProductCode рдФрд░ Magor рдФрд░ рдкреИрдЪ рдХреЗ рдорд╛рдореВрд▓реА рд╕рдВрд╕реНрдХрд░рдг (рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╣реИрдВ) рдФрд░ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд┐рдП рдЧрдП рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рдореЗрд▓ рдЦрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП (рд▓реЗрдХрд┐рди рдмрд┐рд▓реНрдб рд╕рдВрдЦреНрдпрд╛ - рдирд╣реАрдВ)ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдорд╛рдореВрд▓реА рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рднреАрддрд░ рд▓рдВрдШрди рдЕрджреНрдпрддрди рдХреА рдЕрдиреБрдорддрд┐ рджреА рдЬрд╛рдПрдЧреА! рдореБрдЭреЗ рдкрд╛рдБрдЪ рджреЛ! рдорд╛рдиреНрдпрддрд╛ рдореВрд▓реНрдпреЛрдВ рдХреА рдПрдХ рд╡рд┐рд╕реНрддреГрдд рд╢реНрд░реГрдВрдЦрд▓рд╛ рдкрд░ рд▓реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЖрдк рдПрдХ рдмрд╣реБрдд рд╣реА рджрд┐рд▓рдЪрд╕реНрдк рдкреНрд░рднрд╛рд╡ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдХрд╛ рдЖрдирдВрдж рд▓реЗрдВ!
- PatchCreation рдлрд╝рд╛рдЗрд▓ рдЙрди рдЪрд░ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ рдЬреЛ рдкрд╣рд▓реЗ рдШреЛрд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдП рдЧрдП рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: var.PatchFamily , var.PatchVersion ред рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдЪрд░рдг 4 рдореЗрдВ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред
рдФрд░ рдЪрд░рдг 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 рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдорд╛рд░реЗ рдХреЛрдб рдЕрдиреБрдорд╛рдирд┐рдд рд░реВрдк рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрддреНрдкрд╛рдж рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реИрдВред рдЬрдм рд╣рдо рдХреЛрдб рдХреЛ рдереЛрдбрд╝рд╛ рдмрджрд▓ рджреЗрддреЗ рд╣реИрдВ - рд╣рдо рд╕рдВрджрд░реНрдн рдЕрд╕реЗрдВрдмрд▓реА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП
рдмрд┐рд▓реНрдб рдирдВрдмрд░ (рдкреНрд░рддреНрдпреЗрдХ 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" > <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 рдкрд░ рд╕рднреА рд╕реНрд░реЛрдд