برنامه نویس

به وبلاگ خودتان خوش آمدید.

برنامه نویس

به وبلاگ خودتان خوش آمدید.

تغییر فایل xml در installshield

با فرض اینکه فایل xml به صورت زیر باشد


<?xml version="1.0" encoding="utf-8"?>
<platformIDxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
  <type>35</type>
  <manufacturer>14</manufacturer>
  <SerialNumber>
    <version>2</version>
  </SerialNumber>
</platformID>
دو تابع زیر مقدار ورژن را تغییر میدهد :
prototype UpdateWebConfigAttributes(); 
prototype ReplaceValueOf(OBJECT, STRING, STRING);

function UpdateWebConfigAttributes()
    OBJECT oDoc, oNode;
    NUMBER i;                 
    STRING sWebConfigFilePath;  
    BOOL successfulLoad;
begin  

    sWebConfigFilePath = "c:\\Web.config"; 

    if Is(FILE_EXISTS, sWebConfigFilePath) = FALSE then
        MessageBox("Could not find Web.config file.", 0);
    endif;

    // get values from public properties
    set oDoc = CreateObject("Msxml2.DOMDocument.4.0"); 
    if !IsObject(oDoc) then
        MessageBox("Could not create XML Document", 0);
        return -1;    
    endif;    

    oDoc.async = FALSE; 
    oDoc.setProperty("SelectionLanguage", "XPath");

    successfulLoad = oDoc.load(sWebConfigFilePath);
    if !successfulLoad then
        MessageBox("Could not load Web.config as an xml file", SEVERE);                        
        return -1;
    endif;
 ReplaceValueOf(oDoc, "//platformID/SerialNumber/version", "1");
oDoc.save(sWebConfigFilePath);
set oDoc = NOTHING;
end;


function ReplaceValueOf(oDoc, xPath, valueToPutIn)
OBJECT oNode;
begin
set oNode = oDoc.selectNodes(xPath)(0);
try
-- در صورتی که ورژن دارای خصوصیتی به نام نوع باشد خط زیر را اجرا میکنیم
-- oNode.attributes.getNamedItem("kind").value = valueToPutIn;

oNode.attributes.getNamedItem("value").value = valueToPutIn;
catch
MessageBox("Could not set '" + xPath + "' with '" + valueToPutIn + "'", SEVERE);
endcatch;
end;




نصب sql 2008 r2 به صورت سایلنت

مراحل نصب را تا قسمت دریافت فایل ini پیش میرویم .

 ConfigurationFile.ini را در کنار setup sql قرار میدهیم.

 یک فایل bath برای اجرا سایلنت می سازیم و کد زیر را در ان مینویسیم و در کنارفایل ini میگذاریم . در صورتی که فایل bat در مسیر کنار دو فایل دیگر نباشد باید مسیر را نیز به کد زیر اضافه نماییم .

 

"setup.exe" /ConfigurationFile="ConfigurationFile.ini"

حالا کافیست فایل bat را اجرا کنیم

 

تنظیمات فایل  ConfigurationFile.ini برای نسخه Enterprise:

 

·         در صورتی که برای دیتابیس پسورد گذاشتیم خط زیر را با پسورد مدنظر وارد میکنیم :

SAPWD ="PASS"

 

·         مقدار QUIET رو به True تغییر بدید (این پارامتر مشخص کننده این است که برنامه نصب ما به صورت سایلنت یا بدون دخالت کاربر یا به صورت unattended installation اجرا شود)

·         مقدار SQLSYSADMINACCOUNTS رو به “BUILTIN\ADMINISTRATORS” تغییر بدید

·         متغیر PID رو اضافه کنید و مقدار آن رو برابر با لایسنس یا سریال نرم افزار قرار در صورتی که برنامه شما کرک شده می باشد و هنگام نصب نرم افزار ، سریال آن هم وجود دارد ، نیازی به افزودن این خط نداریم

·         پارامتر IACCEPTSQLSERVERLICENSETERMS رو اضافه کنید و مقدار آن رو برابر با “True” قرار دهید

·         حذف پارامتر ADDCURRENTUSERASSQLADMIN ، زمانی که مقدار پارامتر SQLSYSADMINACCOUNTS تعیین شده باشد از این پارامتر نمی توان استفاده کرد. فقط در اینستالر Express جواب می دهد.

·         حذف پارامتر UIMODE ، این پارامتر با پارامتر QUITE قابل اسفاده نمی باشد

·         حذف پارامترهای INSTALLSHAREDDIR ، INSTALLSHAREDWOWDIR ، INSTANCEDIR . زمانی که می خواهیم نصب در پوشه های پیش فرض انجام شود.

استفاده از radiobutton در installshield


BOOL bvCheck1,bvCheck2;

begin

Dlg_SdAskOptions:  

 bvCheck1= TRUE;

 bvCheck2= FALSE; 

 nResult=AskOptions (EXCLUSIVE," Select your Type Below.","install ", bvCheck1,"not install", bvCheck2);

if (bvCheck1 = 1 )then

   goto  DLG_Install;

 endif;   


استفاده از فایل ini در installshield


به عنوان نمونه اگر فایل ini با نام ConfigurationFile در مسیر جاری فایل نصب باشد  :


[general]
title="1234"

کد زیر را برای تغییر دادن مقادیر فایل می نویسیم :


    WriteProfString(SRCDIR^"my folder\\ConfigurationFile.ini",

         "general",

         "title",

         "\""+1111+"\"") ;

استفاده از تصویر و موسیقی در Installshield

قبل از هر چیز فایلهایی که انتخاب میکنید باید دارای پسوندهای زیر باشن وگرنه جواب نمیده و محیط IS به حروف کوچک و بزرگ حساس .
  • تمامی عکسها و تصاویر مورد نیاز، حتما باید با پسوند *.BMP باشند با سایز 1024 در 768
  •  صداها باید Wav یا MIDI باشند
  •  فایلهای ویدیویی باید AVI باشند

عکسهایی که برای BillBoard نیاز دارید باید با نام Bbrd آغاز گردند .

حال در سربرگ Installation Designer ، از زیر شاخه Behavior And Logic ، گزینه Support Files را انتخاب کنید.در فریم وسط، گزینه Language Independent ، از زیر شاخه Support Files را انتخاب کنید! (گزینه اول)
در این قسمت تصویر مورد نیاز برای پس زمینه، موسیقی و کلیپ تصویری خود را وارد کنید.

دوباره در فریم وسط، گزینه Language Independent ، از زیر شاخه BillBoards را انتخاب کنید! و تصاویری که میخواهید در حین نصب نمایش داده شوند را وارد کنید! (دقت کنید که فایلها باید با Bbrd شروع شوند!)
اگر هم می خواهید تصویری به عنوان سرآغاز نمایش داده شود، در قسمت Splash Screen آن را وارد کنید!
حال بر روی InstallScript از زیر شاخه Behavior And Logic کلیک کرده تا وارد محیط کد نویسی شوید!

 گذاشتن Background برای پروژه
برای اینکار ابتدا باید عکس خود را معرفی یا اعلان کنید! یعنی بعد از (#include “ifx.h”) کد زیر را تایپ کنید: (شما باید کلماتی را که با حروف بزرگ (Cap) نوشته شده اند، با حروف بزرگ بنویسید!)

#include "ifx.h"
#define BMP_PATH   SUPPORTDIR ^ "Wallpaper.bmp"
#define BMP_ID     1


حال در تابع OnFirstUIBefore() کدهای زیر را اضافه کنید


function OnFirstUIBefore()
    number  Result1,nResult, nLevel, nSize, nSetupType;
    string  szTitle, szMsg, szOpt1, szOpt2, szLicenseFile;
    string  szName, szCompany, szTargetPath, szDir, szFeatures, szTargetdir,szTest;
    BOOL    bLicenseAccepted;   
      string svNumValue,svName,Svcustomer,SvServerSystemName;
    number   nvUser,nvType,nvSize;
begin     

    Enable (BACKGROUND);
     SetColor(BACKGROUND,BLACK);
     SetDisplayEffect (EFF_VERTSTRIPE);
     PlaceBitmap( BMP_PATH , 1 , CENTERED , CENTERED , CENTERED );
     Delay(5);     


حالا کلیدهای Ctrl+F5 را بزنید و منتظر مشاهده نتیجه باشید!
(کدها بسیار واضع هستند و نیازی به توضیح نیست!)
برای اطلاعات بیشتر، Ctrl+I را زده و در پنجره ظاهر شده از قسمت Function Category گزینه User Interface را انتخاب و در فریم سمت راست، گزینه PlaceBitmap را انتخاب کنید!


  تغییر یافتن اتوماتیک تصاویر در حین نصب
این مرحله نیاز به کدنویسی ندارد! کافیست شما تصاویر خود را در قسمت SupportFiles بخش Billboards وارد کنید! دقت کنید که نام فایلها با Bbrd شروع شوند!


 قرار دادن موسیقی در حین نصب
شما ابتدا باید موسیقی خود را اعلان کنید! یعنی طبق مرحله قبل بعد از Include “ifx.h” کد زیر را وارد کنید!



#include "ifx.h"
#define Music   SUPPORTDIR ^ "Music.wav"
#define Title1     "this is sample"


حال در تابع OnFirstUIBefore() کدهای زیر را اضافه کنید! (برای داشتن پس زمینه، نیازی به حذف کدهای مرحله قبل نیست و کدهای زیر را بعد از آنها وارد کنید.)


      SetTitle (title1,26,WHITE)
      if (PlayMMedia (MMEDIA_WAVE),Music,MMEDIA_PLAYASYNCH | MediaGetData,0)<0)
      then
      MessageBox("unable play music",WARNING)

نکته اضافی

SetTitle

 فقط یک متن را روی صفحه نمایش میدهد که این متن در بالا اعلان شده است و تأثیری در پخش موسیقی ندارد

installshield: اسکریپت اضافه کردن alias در Client Network Utiliy

اگر بخواهید از طریق کدنویسی در Client Network Utility چند Alias تعریف کنید چه چه کاری باید انجام دهید ؟

راه حلی که من استفاده کردم نوشتن اسکریپتی برای تغییر در رجیستری ویندوز است . که در مسیر HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLS erver\Client\ConnectTo

تمام الیاس های تعریف شده قرار دارد . حال برای اضافه کردن یک الیاس جدید کافی است که کد زیر را بنویسید :

RegDBSetDefaultRoot( HKEY_LOCAL_MACHINE );
RegDBSetKeyValueEx ( "Software\\Microsoft\\MSSQLServer\\Client\\ConnectTo\\"

,str_name_system_server+"\\"+str_instansename1, REGDB_STRING, "DBNMPNTW,\\"+"\\data\\pipe\\MSSQL$"+str_instansename1+"\\sql\\query", -1 );


که str_instansename1 نام instance و str_name_system_server نام سرور است .

با RegDBSetDefaultRoot نام ریشه را مشخص می کنیم . RegDBSetKeyValueEx مقادیر خود را برای اضافه کردن مشخص می کنیم . که مسیر ، نام ، نوع ، مقدار و سایز را می دهیم . که با تغییر در کد می توانید هر مقادری را به رجیستری اضافه کنید .

استفاده از متغیر ها در installshield


شاید شما در installshield به مقداری که کاربر وارد می کند نیاز داشته باشید که برای این کار باید یک متغیر سراسری تعریف کنید . برای تعریف یک متغیر سراسری که بتوان از آن در تمام توابع و دیالوگ ها استفاده کرد مراحل زیر را طی کنید .

در Behavior and logic گزینه installscript را انتخاب کنید حالا در  سمت راست سه شاخه می بینید files , function  و properties بر رو ی properties راست کلیک و add new property را کلیک کنید . در قسمت property name نام متغیر را وارد کنید .  در قسمت data type نوع آن را مشخص کنید و در Local Variable Name نامی را که در حین کدنویسی به آن نیاز دارید را تایپ کنید . در Default Value  هم مقدار پیش فرض خود را قرار دهید . بر روی ok کلیک کنید . خواهید دید که نام متغیر به لیست properties شما اضافه خواهد شد . اگر اضافه نشد باید آن را تعریف کنید برای این کار کد زیر ررا با نام متغیر خود در بالای فرم تعریف کنید در اینجا متغیری با نام sale از نوع number تعریف شده است .



property(get,put) NUMBER sale();
NUMBER m_sale

و پنج تابع زیر هم اضافه خواهد شد .

function InitProperties()
begin
    m_nsale = 0;
end;
 
function ReadProperties(PropertyBag)
begin
    ReadNumberProperty(PropertyBag, "sale", m_nsale);
end;
 
function WriteProperties(PropertyBag)
begin
    WriteNumberProperty(PropertyBag, "sale", m_nsale);
end;
 
function NUMBER get_sale()
begin
    return m_nsale;
end;
 
function void put_sale(newVal)
begin
    m_nsale = newVal;
end;

حال هر جا که احتیاج داشتید با فراخوانی متغیر خود (m_sale) می توانید از آن  استفاده کنید .

فارسی کردن برنامه نصب با installsheild


افراد زیادی برای ساخت یک برنامه نصب از  installshield استفاده می کنند . مزیت این نرم افزار نسبت به بقیه پشتیبانی قوی نسبت به بانک ها ی اطلاعاتی است  اما نسبت به پشتیبانی فارسی کمی دچار مشکل می شویم . درباره این نرم افزار و نحوه کار کردن با آن در سایت های مختلف به صورت تکراری بیان شده است که من  آنها را بیان نمی کنم .  در اینجا چگونه فارسی کردن مراحل setup را یاد می گیریم . که کمترجایی عنوان شده است . 

روش اول :

در زمان ایجاد پروژه جدید  گزینه  Basic MSI Project را انتخاب کنید در این صورت امکانات شما کمتر است . اما برای انجام یک پروژه کوچک مناسب است . در این محیط دست شما برای کدنویسی باز نیست . در نسخه 10.5    و 2008   این نرم افزار از منوی tools\add new language  می توانید زبان فارسی را به برنامه خود اضافه کنید (البته شاید در نسخه های دیگر آن هم این گزینه باشد اما من در نسخه2009 پیدا نکردم اما در نسخه کامل آن زبان فارسی و یا عربی به لیس زبان ها یآن اضافه شده است و شما کافی است فارسی را نتخاب کنید) . حال اگر به لیست زبان های خود در Installation Localization نگاه کنید خواهید دید که زبان فارسی اضافه شده است . در Installation Designer قسمت User Interface بر روی Dialog کلیک کنید . اگر روی هر دیالوگ کلیک کنید خواهید دید که زبان فارسی در آنجا وجو دارد که با انتخاب هر آیتم و تغییر متن خصوصیت text به فارسی  می توانید تمام پنجره های خود را فارسی کنید .  

یک روش دیگر استفاده از تصاویر با پسوند BMP است که این عمل هم تنها در حالت Basic MSI Project درست عمل می کند . اما مزیت این روش این است که می توانید فرم های خود را به صورت دلخواه طراحی کنید برای تغییر زمینه دکمه ها هم باید خصوصیت Control Style آن را به Bitmap و یا Icon تغییر دهید .

روش دوم :

در زمان ایجاد پروژه بر روی Installscript Project کلیک کنید . در اینجا دیگر قادر نیستید در طراحی فارسی تایپ کنید اما با کد نویسی این امکان برای شما وجو دارد . در قسمت Installation Designer  بر روی Behavior and Logic گزینه Installscript را انتخاب کنید . حال با توجه به دیالوگ هایی که مورد نیاز دارید و در حین نصب استفاده می کنید که بیشتر این دیالوگ ها خود در صورت عبور از تمامی مراحل  در اینجا قرار میگیرند  و با تغییر دو لیست باکس بالای صفحه می توانید رویدادهای را که می خواهید اتفاق افتند  را انتخاب کنید .  حالا هرجاییی که متنی قرار گرفته است را با متن فارسی خود جایگزین کنید . که در زیر کد دیالوگ  welcom را به عنوان نمونه قرار داده ام . که به جای متن فارسی قبلا szTitle و szMsg وجود داشته است .

Dlg_SdWelcome:

    szTitle = "";

    szMsg = "";

    //{{IS_SCRIPT_TAG(Dlg_SdWelcome)

   nResult = SdWelcome("به برنامه نصب خوش آمدید" ,"نرم  افزار بر روی سیستم شما نصب خواهد شد " );

    //}}IS_SCRIPT_TAG(Dlg_SdWelcome)

    if (nResult = BACK) goto Dlg_Start;