WiX ծրագրային գործիքների համախումբ
Իրադարձություններ և գործողություններ
1. Պատվիրելի գործողություններ (custom action)
Windows համակարգում ծրագրային միջոցների տեղակայման ընթացքում, որոշ նեղ մասնագիտական գործողությունների իրականացման համար, որոնց համար Windows-ի տեղադրող ծրագիրը չի ապահովում որևիցե մի լուծում (օրինակ օգտագործողի գրանցման բանալու վավերցման իրականացում) , մենք կարող ենք օգտագործել այլ ճանապարհ՝ մենք կգրենք DLL, որի օգնությամբ մենք կստուգենք օգտագործողի գրանցման բանալու ճշտությունը:
Ստեղծենք մի պարզունակ DLL այդ նպատակի համար: Հետևյալ ելակետային կոդը կարող ենք ուղղակիորեն օգտագործել Visual C++-միջավայրում մեր ցանկալի DLL -ի ստեղծման համար՝
#include <windows.h>
#include <msi.h>
#include <msiquery.h>
#pragma comment(linker, “/EXPORT:CheckPID=_CheckPID@4″)
extern “C” UINT __stdcall CheckPID (MSIHANDLE hInstall)
{
char Pid[MAX_PATH];
DWORD PidLen = MAX_PATH;
MsiGetProperty (hInstall, “PIDKEY”, Pid, &PidLen);
MsiSetProperty (hInstall, “PIDACCEPTED”, Pid[0] == ‘1′ ? “1″ : “0″);
return ERROR_SUCCESS;
}
Նկատենք, որ այս DLL-ի անխափան կառուցման համար հարկավոր կլինի նախագծի հատկությունների (Properties-> Linker-> Input-> Additional Dependences ) մեջ ավելացնել ՛msi.lib՛ կախվածությունը:
Ավելացնելով հետևյալ WIX կոդի հատվածը մեր հիմնական WIX տեղակայման ծրագրին, մենք դրանով իսկ կապահովենք DLL-ի “CheckPID” ֆունկցիայի օգտագործումը օգտագործողի գրանցման բանալու վավերացումը իրականացնելու համար՝
<Condition Message=’This installation can only run in full UI mode.’>
<![CDATA[UILevel = 5]]>
</Condition>
<CustomAction Id=’CheckingPID’ BinaryKey=’CheckPID’ DllEntry=’CheckPID’ />
<CustomAction Id=’RefusePID’ Error=’Invalid key. Installation aborted.’ />
<InstallExecuteSequence>
<Custom Action=’CheckingPID’ After=’CostFinalize’ />
<Custom Action=’RefusePID’ After=’CheckingPID’>PIDACCEPTED = “0″ AND NOT Installed</Custom>
</InstallExecuteSequence>
<Binary Id=’CheckPID’ SourceFile=’CheckPID.dll’ />
Համառոտագրենք այս տարբերանիշերը (tag):
- նախ մենք Windows-ի տեղադրող ծրագրից պահանջում ենք, որ այն աշխատի օգտագործողի գրաֆիկական ինտերֆեյսի աշխատակարգով, որովհետև հակառակ դեպքում օգտագործողը չի կարողանա մուտքագրել գրանցման բանալին: Դրան մենք հասնում ենք Condition տարբերանիշի օգնությամբ՝ <![CDATA[UILevel = 5]]>, նկատենք, որ եթե երբևիցե ուզում ենք օգտագործել “=” , ”>” կամ “<” նշանները երկու մեծությունների համեմատության համար, ապա ստիպված կլինենք դրանք պարփակել “CDATA” պարույրիչով (wrapper)
- այնուհետև “CustomAction ” տարբերանիշի օգնությամբ նկարագրում ենք ‘CheckingPID’ պատվիրելի գործողությունը և “InstallExecuteSequence” տարբերանիշի օգնությամբ Windows-ի տեղադրող ծրագրին հայտնում ենք, որ ‘CheckingPID’ պատվիրելի գործողությունը պետք է ակտիվացվի ‘CostFinalize’ ստանդարտ գործողությունից հետո: ‘CheckingPID’ պատվիրելի գործողությունը կկանչի ‘CheckPID’ DLL-ի ‘CheckPID’ ֆունկցիան, որը ‘PIDACCEPTED’ հատկությանը կվերագրի 0 կամ 1, ըստ որի էլ կիրականացվի օգտագործողի գրանցման բանալու վավերցումը: Նկատենք, որ հատկությունների օգտագործումը ( մեծատառերով հայտարարված միայն, հակառակ դեպքում Windows տեղադրող գործիքը այն չի ճանաչի որպես ընդհանուր (public) հատկություն ) միակ ճանապարհն է, արգումենտները պատվիրելի գործողություններին փոխանցելու և հետ ստանալու համար:
- ‘RefusePID‘ -ը մեր կողմից ստեղծված երկրորդ պատվիրելի գործողությունն է, որը նախատեսված է ակտիվացնել ‘CheckingPID’-ից հետո(After): Սա պայմանական պատվիրելի գործողություն է, որը կգործարկվի միայն այն ժամանակ, եթե վերադարձված “PIDACCEPTED” հատկության արժեքը 0 է, այս դեպքում տեղակայման ընթացքում կերևակվի հաղորդագրություն սխալի մասին, ընդ որում, նկատենք նաև որ այս գործողությունը ակտիվանալու է միայն ծրագրի տեղակայման և ոչ թե նրա հեռացման ժամանակ:
SampleCA այս հղումը մեզ թույլ կտա բեռնավորել հենց այս նպատակով ստեղծված օրինակը և օգտագործելով փորձել այն զարգացնել:
2. Պատվիրելի գործողությունների ճկունացումը
Փորձենք օգտագործողի ինտերֆեյսը փոխենք այնպես, որ եթե օգտագործողը պատահմամբ սխալ մուտքագրում կատարի գրանցման բանալու մուտքի ժամանակ, ապա հնարավորություն տանք նորից փորձելու:
Պատվիրելի գործողությունները օգտագործողի երկխոսության պատուհանից կարող ենք գործարկել օրինակի համար սեղմվող կոճակի օգնությամբ
<Control Id=”…” Type=”PushButton” …>
<Publish Event=”DoAction” Value=”CheckingPID”>1</Publish>
</Control>
“Publish” տարբերանիշի օգնությամբ Windows-ի տեղադրող ծրագրին հաղորդում ենք, որ “Next” կոճակը սեղմելիս պետք ե գործարկվի “CheckingPID” պատվիրելի գործողությունը: Հետևաբար անհրաժեշտություն չկա “InstallExecuteSequence” տարբերանիշով նախորոշել “CheckingPID” -ի գործարկման հերթականությունը: Բայց այնուամենայնիվ պատվիրելի գործողության հայտարարումը պարտադիր է:
<CustomAction Id=’CheckingPID’ BinaryKey=’CheckPID’ DllEntry=’CheckPID’ />
Օգտագործողին սխալի մասին տեղյակ պահելու նպատակով մեզ անհրաժեշտ կլինի կառուցել հաղորդագրության պատուհան՝
<Dialog Id=”InvalidPidDlg” Width=”260″ Height=”85″ Title=”[ProductName] Setup” NoMinimize=”yes”>
<Control Id=”Icon” Type=”Icon” X=”15″ Y=”15″ Width=”24″ Height=”24″
ToolTip=”Information icon” FixedSize=”yes” IconSize=”32″ Text=”Exclam.ico” />
<Control Id=”Return” Type=”PushButton” X=”100″ Y=”57″ Width=”56″ Height=”17″ Default=”yes” Cancel=”yes” Text=”&Return”>
<Publish Event=”EndDialog” Value=”Return”>1</Publish>
</Control>
<Control Id=”Text” Type=”Text” X=”48″ Y=”15″ Width=”194″ Height=”30″ TabSkip=”no”>
<Text>
The user key you entered is invalid. Please, enter the key printed on the label
of the jewel case of the installation CD.
</Text>
</Control>
</Dialog>
Մեզ անհրաժեշտ կլինի նաև թարմացնել օգտագործողի ինֆորմացիոն էջը , որովհետև պատվիրելի գործողությունը կանչվելու է այս էջից՝
<Control Id=”Next” Type=”PushButton” X=”236″ Y=”243″ Width=”56″ Height=”17″
Default=”yes” Text=”[ButtonText_Next]“>
<Publish Event=”DoAction” Value=”CheckingPID”>1</Publish>
<Publish Event=”SpawnDialog” Value=”InvalidPidDlg”>PIDACCEPTED = “0″</Publish>
<Publish Event=”NewDialog” Value=”SetupTypeDlg”>PIDACCEPTED = “1″</Publish>
</Control>
Այժմ, երբ օգտագործողը սեղմի “Next” կոճակը , DLL -ի ‘CheckPID’ ֆունկցիան կկանչվի, և կախված նրանից թե ինչ կվերադարձնի ֆունկցիան, ըստ դրա էլ կամ կբացվի հաջորդ “SetupTypeDlg” պատուհանը (հաջող ավարտի դեպքում), կամ էլ կերևակվի սխալի մասին հաղորդագրությունը (անհաջող ավարտի դեպքում):
Չմոռանանք ավելացնել նաև՝
<Binary Id=”Exclam.ico” SourceFile=”Exclam.ico” />
տարբերանիշը (ծրագրի պատկերանշանի համար):
Այս պարբերությանը վերաբերվող օրինակի պարփակ տարբերակը կարելի է բեռնավորել այստեղից:
Նկատենք նաև, որ որպեսզի օգտագործողի գրանցման բանալին պատահաբար չմուտքագրենք Windows-ի տեղադրող ծրագրի լոգ (log) ֆայլում, մեր WIX կոդին ավելացնենք նաև հետևյալ տարբերանիշը՝
<Property Id=”PIDKEY” Hidden=’yes’ />
(Շարունակելի)
One Trackback
[...] Նախորդ Հաջորդ [...]