1

Konu: İşletim sistemi 32-64 bit kontrol ve Native Client kontrol

Öncelikle herkese merhaba,
SQL Server 2005 veritabanı kullanmakta olduğum yazılımlarda 64 bir işletim sisteminin yaygınlaşmasından dolayı güncellemeler yapmam gerekiyor.
Güncelleme indirirken kullanıcıya 32? 64? seçimi yaptırmak yerine tek bir dosya indirmek ve foxda hazırladığım yazılım kurulduktan sonra açılırken (her açılışında) Windows işletim sisteminin türünü ve "Native Client" yüklü olup olmadığının kontrolü gerekiyor. Amacım bu kontroller sonrasında eğer "Native Client" yüklü değil ise Windows işletim sistemi türüne göre (32-64) gerekli "Native Client" msi yüklemesini başlatmak istiyorum. Zaten daha öncesinden yüklü ise gerekli diğer güncellemeler tamamlanmış oluyor.
Sıkıntım, Windows türünü okuyabiliyorum ama efektif değil biraz daha araştırmam lazım ancak "Native Client" yüklü olup olmadığını foxite ve burdaki konularda bir ipucu bulamadım. "Native Client" yüklü olup olmadığını nasıl kontrol edebilirim. Bir yardım lütfen. Şimdiden teşekkürler.

2

Re: İşletim sistemi 32-64 bit kontrol ve Native Client kontrol

Microsoft un sitesinden SQL Server Native client dosyasının her iki sürümünüde indirip farklı isimlerle kaydedebilirsin :

sqlsrvnclx32.exe
sqlsrvnclx64.exe

Kullanıcının işletim sistemi versiyonuna göre de kurulum dosyasını çalıştırırsın.

Visual Fox Pro
FUNCTION isWindows64bit && Author Sergey Berezniker

    * First determine if IsWow64Process function exists in the OS we're running under
    DECLARE Long GetModuleHandle IN WIN32API STRING lpModuleName
    DECLARE Long GetProcAddress IN WIN32API Long hModule, String lpProcName
    llIsWow64ProcessExists = (GetProcAddress(GetModuleHandle("kernel32"),"IsWow64Process") <> 0)
 
    llIs64BitOS = .F.
    IF llIsWow64ProcessExists
        DECLARE Long GetCurrentProcess IN WIN32API
        DECLARE Long IsWow64Process IN WIN32API Long hProcess, Long @ Wow64Process
        lnIsWow64Process = 0
        * IsWow64Process function return value is nonzero if it succeeds
        * The second output parameter value will be nonzero if VFP application is running under 64-bit OS
        IF IsWow64Process( GetCurrentProcess(), @lnIsWow64Process) <> 0
            llIs64BitOS = (lnIsWow64Process <> 0)
        ENDIF   
    ENDIF   
 
    CLEAR DLLS GetModuleHandle
    CLEAR DLLS GetProcAddress
    CLEAR FIELDS
 
    Return(m.llIs64BitOS)
ENDFUNC



Visual Fox Pro
*!*    ?isSQLDriverInstall()

FUNCTION isSQLDriverInstall
    LOCAL lcBuffer, lnBufsize, lnii, lcch, lcName, laReturnVal(1), llRetVal As Boolean 
    m.lnBufsize = 16384
    m.lcBuffer = Repli(Chr(0), m.lnBufsize)
 
*!*         Todo : isAdmin değilse kurulum olmaz.
 
    DECLARE INTEGER SQLGetInstalledDrivers IN odbccp32;
        STRING @lpszBuf, INTEGER cbBufMax, INTEGER @pcbBufOut
 
    IF SQLGetInstalledDrivers(@lcBuffer, m.lnBufsize, @lnBufsize) = 0
        RETURN
    ENDIF
 
    CREATE CURSOR csDriverResult (drvname C(150))
    m.lcBuffer = SUBSTR(m.lcBuffer,1,m.lnBufsize)
    m.lcName = ""
 
    FOR m.lnii=1 TO m.lnBufsize
        m.lcch = SUBSTR(m.lcBuffer, m.lnii,1)
        IF m.lcch = Chr(0)
            INSERT INTO csDriverResult VALUES (m.lcName)
            m.lcName = ""
        ELSE
            m.lcName = m.lcName + m.lcch
        ENDIF
    ENDFOR
 
    SELECT Distinct UPPER(drvname) FROM csDriverResult WHERE UPPER(drvname) = "SQL SERVER NATIVE CLIENT 10.0" INTO ARRAY laReturnVal
 
    IF _Tally > 0
        m.llRetVal = .T.
    ELSE
        m.llRetVal = .F.
 
 
*!*            IF 6 = MESSAGEBOX("Programın çalışması için Microsoft SQL Native Client dosyasının kurulması gerekmektedir."+CHR(13)+"Dosyayı Microsoft 'un sitesinden otomatik olarak indirmek ve kurmak istermisiniz?"+CHR(13)+"Kurulum tamamlandıktan sonra Programı ı tekrar çalıştırınız.",4+48,"Dosya kurulum uyarısı")
 
*!*                * SQL Server 2008 Native Client x86 : http://go.microsoft.com/fwlink/?LinkId=123717&clcid=0x409
*!*                * SQL Server 2008 Native Client x64 : http://go.microsoft.com/fwlink/?LinkId=123718&clcid=0x409
 
*!*                IF isWindows64Bit() = .F. && 32 Bit windows
*!*                    oIE.Navigate("http://go.microsoft.com/fwlink/?LinkId=123717&clcid=0x409")
*!*                ELSE && 64 bit Windows
*!*                    oIE.Navigate("http://go.microsoft.com/fwlink/?LinkId=123718&clcid=0x409")
*!*                ENDIF
 
*!*                oIE.Visible = .T.
*!*           
*!*            ELSE && 7 Çıkış
*!*                MESSAGEBOX(['SQL Server Native Client 10' driver ı olmadan Program çalışmaz. Belirtilen dosyayı indirip sisteminize kurmanız gerekmektedir! Kurulum sırasında sisteminize uygun olan 32 yada 64 bit kurulum dosyasını çalıştırınız.],0+16,"SQL Server Bağlantı Hatası")
*!*                ogu.Kapat()
*!*            ENDIF
 
        DECLARE INTEGER ShellExecute IN Shell32.DLL AS MyShellExecute ;
           LONG nhWnd, STRING cAction, STRING cFile, ;
           STRING cParam, STRING cDirectory, INTEGER nShow
 
        IF isWindows64Bit() = .F. && 32 Bit windows
            IF FILE(ADDBS(oGu.PathofPrgStart)+"Setup\sqlncli_x86.msi")
                m.lcShellCmd = " /i  "+ADDBS(ogu.PathofPrgStart)+"sqlncli_x86.msi /qb ADDLOCAL=ALL APPGUID={0CC618CE-F36A-415E-84B4-FB1BFF6967E1} IACCEPTSQLNCLILICENSETERMS=YES"
            ENDIF
        ELSE && 64 bit Windows
            IF FILE(ADDBS(oGu.PathofPrgStart)+"Setup\sqlncli_x64.msi")
                m.lcShellCmd = " /i  "+ADDBS(ogu.PathofPrgStart)+"sqlncli_x64.msi /qb ADDLOCAL=ALL APPGUID={0CC618CE-F36A-415E-84B4-FB1BFF6967E1} IACCEPTSQLNCLILICENSETERMS=YES"
            ENDIF
        ENDIF
 
        MyShellExecute(0, NULL, "msiexec.exe", m.lcShellCmd, NULL, 0) && Todo : Hata veriyor, Dosyayı indir ve kullan!
        CLEAR DLLS MyShellExecute
 
        MESSAGEBOX("Programın çalışması için gerekli olan sqlncli.msi dosyasının kurulumu başlatıldı. Programın çalışmasına SQL Native Client kurulumu tamamlandıktan sonra devam edebilirsiniz.";
                    +ADDBS(ogu.PathofPrgStart) + "SETUP\" + IIF(isWindows64Bit()=.T.,"sqlncli_x64.msi","sqlncli_x86.msi")+CHR(13)+" dosyasını çalıştırınız!")
                    ,0+64,"
UYARI!")   
 
        MESSAGEBOX(VeriTabaniBaglantiKontrolu,"
Server Bağlantı Hatası.1"+CHR(13)+"Eğer internet bağlantınız aktif ise"+ ADDBS(ogu.PathofPrgStart) + "SETUP\" + IIF(isWindows64Bit()=.T.,"sqlncli_x64.msi","sqlncli_x86.msi")+CHR(13)+"Dosyasını çalıştırınız!")
 
        WAIT WINDOW "
Lütfen sqlncli.msi dosyasının kurulumunu tamamlayın!" NOWAIT
 
        DECLARE Sleep IN kernel32 INTEGER dwMilliseconds
        Sleep(5000) && Önemli !!!
 
    ENDIF
 
    CLEAR DLLS SQLGetInstalledDrivers
    USE IN SELECT("
csDriverResult")
 
    RETURN (m.llRetVal)
ENDFUNC
Uğur
-------------------------------------------------------------------------------------------------------------
Hayat bir bisiklete binmek gibidir. Pedalı çevirmeye devam ettiğiniz sürece düşmezsiniz. Claude Peppeer
Kusuru söylenmeyen adam, ayıbını hüner sanır.  Türk Atasözü

3

Re: İşletim sistemi 32-64 bit kontrol ve Native Client kontrol

ugurlu tşk. adın gibi ugurlu geldin vediğin fonksiyonlar işimi fazlasıyla çözüyor. tekrar teşekkür

4 Son düzenleyen, ugurlu2001 (15.10.2012 12:11:02)

Re: İşletim sistemi 32-64 bit kontrol ve Native Client kontrol

Rica ederim Ali;

Adım Uğur. Fox4um da hesabımı açıyorken, Mail adresimle le aynı olsun diye hesabı ugurlu2001 olarak açmıştım.

İşine yaramasına sevindim ...

Uğur
-------------------------------------------------------------------------------------------------------------
Hayat bir bisiklete binmek gibidir. Pedalı çevirmeye devam ettiğiniz sürece düşmezsiniz. Claude Peppeer
Kusuru söylenmeyen adam, ayıbını hüner sanır.  Türk Atasözü