WiX Ծրագրային Գործիքների Համախումբ: Մաս 5

Նախորդ

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=”&amp;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’ />

(Շարունակելի)

This entry was posted in Ծրագրերի Տեղակայում. Bookmark the permalink. Post a comment or leave a trackback: Trackback URL.

One Trackback

  1. [...] Նախորդ Հաջորդ [...]

Post a Comment

Your email is never published nor shared. Required fields are marked *

*
*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>