Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

SQL सर्वर कॉम्पैक्ट संस्करण 4.0 को कैसे तैनात करें?

मैंने समाधान बना लिया है।

SQL सर्वर कॉम्पैक्ट संस्करण में 7 dll शामिल हैं:

  • sqlceme40.dll गैर-दस्तावेजी, मूल, फ्लैट एपीआई लाइब्रेरी (.नेट System.Data.SqlServerCe.dll असेंबली इस dll के चारों ओर एक आवरण है)
  • sqlceca40.dll एक COM dll जो Engine . को लागू करता है , Replication , Error और कुछ अन्य COM ऑब्जेक्ट
  • sqlceoledb40.dll एक COM dll जो SSCE के लिए OLEdb प्रदाता को लागू करता है (ADO के उपयोग की अनुमति देता है)
  • sqlcese40.dll अज्ञात
  • sqlceqp40.dll अज्ञात
  • sqlcecompact40.dll अज्ञात
  • sqlceer40en.dll अज्ञात

इन dll को केवल शिप करने का प्रयास करने में समस्या यह है कि उनमें से दो COM . हैं वस्तुओं। COM ऑब्जेक्ट dll को पंजीकृत होने की आवश्यकता है , उदा.:

>regsvr32 sqlceca40.dll
>regsvr32 sqlceoledb40.dll

समस्या यह है कि COM ऑब्जेक्ट को पंजीकृत करने के लिए प्रशासनिक . की आवश्यकता होती है विशेषाधिकार (एक स्थानीय समस्या को हल करने के लिए वैश्विक समाधान का उपयोग करना ) इसका मतलब है कि आपके उपयोगकर्ता

  • इंस्टॉल करना होगा आपका आवेदन (जो आप नहीं करना चाहते)
  • आपके उपयोगकर्ताओं को व्यवस्थापकीय अनुमतियों की आवश्यकता है (जो आप नहीं करना चाहते)

सौभाग्य से, 2001 में Windows XP के साथ शुरू होकर, Microsoft ने इस सामान्य समस्या का समाधान किया:Registration- मुफ़्त कॉम

सबसे पहले, आप घोषणा करेंगे कि आपके आवेदन में एक "निर्भरता" . है SQL सर्वर कॉम्पैक्ट संस्करण 4.0 पर। आप एक असेंबली मेनिफेस्ट लिखकर ऐसा करते हैं:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 
    <assemblyIdentity 
        version="1.0.0.0"
        processorArchitecture="X86"
        name="client"
        type="win32"
    /> 

    <description>Hyperion Pro</description> 

    <!-- We have a dependancy on SQL Server CE 4.0 -->
    <dependency>
        <dependentAssembly>
            <assemblyIdentity
                type="win32"
                name="Microsoft.SQLSERVER.CE.4.0"
                version="4.0.0.0" processorArchitecture="x86"
            />
        </dependentAssembly>
    </dependency>
    <!-- We are high-dpi aware on Windows Vista -->
    <asmv3:application xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
        <asmv3:windowsSettings
            xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
            <dpiAware>true</dpiAware>
        </asmv3:windowsSettings>
    </asmv3:application>

    <!-- We were designed and tested on Windows 7 -->
    <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
        <application>
            <!--The ID below indicates application support for Windows 7 -->
            <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
            <!--The ID below indicates application support for Windows Vista -->
            <!--supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/-->
        </application>
    </compatibility>

    <!-- Disable file and registry virtualization -->
    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
        <security>
            <requestedPrivileges>
                <requestedExecutionLevel level="asInvoker" uiAccess="false"/>
            </requestedPrivileges>
        </security>
    </trustInfo>
</assembly>

आप इस फ़ाइल को बगल रख सकते हैं आपका निष्पादन योग्य (Hyperion.exe.manifest . के रूप में) ), या आप इसे अपने एप्लिकेशन में RT_MANIFEST . के रूप में बना सकते हैं संसाधन।

ध्यान दें कि हमारे पास Microsoft.SQLSERVER.CE.4.0 नामक असेंबली के विरुद्ध निर्भरता है . हम पहले एक निर्देशिका . बनाकर इस असेंबली को बनाते हैं कहा जाता है:

जब आप अपना आवेदन परिनियोजित करते हैं, तो आप इस "असेंबली" को शामिल करने वाले सभी 7 dll डाल देंगे इस Microsoft.SQLSERVER.CE.4.0 . में सबफ़ोल्डर, एक विशेष .manifest . के साथ फ़ाइल:

📁C:\
╰──📁Users
   ╰──📁Ian
      ╰──📁AppData
         ╰──📁Local
            ╰──📁Hyperion Pro
               ├──📄Hyperion.exe
               ├──📄Hyperion.exe.manifest
               ╰──📁Microsoft.SQLSERVER.CE.4.0
                  ├──📄sqlceme40.dll
                  ├──📄sqlceca40.dll
                  ├──📄sqlceoledb40.dll
                  ├──📄sqlcese40.dll
                  ├──📄sqlceqp40.dll
                  ├──📄sqlcecompact40.dll
                  ├──📄sqlceer40en.dll
                  ╰──📄Microsoft.SQLSERVER.CE.4.0.manifest

दूसरे शब्दों में, एप्लिकेशन फ़ोल्डर में आपका एप्लिकेशन और Microsoft.SQLSERVER.CE.4.0 शामिल हैं। फ़ोल्डर:

 Directory of C:\Users\Ian\AppData\Local\Hyperion Pro

05/29/2012  09:23 AM         1,899,008 Hyperion.exe
05/28/2012  01:46 PM             1,587 Hyperion.exe.manifest
05/29/2012  09:27 AM    <DIR>          Microsoft.SQLSERVER.CE.4.0
           2 File(s)      1,900,675 bytes
           1 Dir(s)  20,851,503,104 bytes free

आपके कार्य का अगला भाग Microsoft.SQLSERVER.CE.4.0.manifest को परिभाषित करना है फ़ाइल। पंजीकरण-मुक्त COM एक मेनिफेस्ट फ़ाइल को सभी COM ऑब्जेक्ट्स और उनके clsid की घोषणा करने की अनुमति देता है। इसने बहुत सारी रिवर्स इंजीनियरिंग की। लेकिन SQL सर्वर कॉम्पैक्ट संस्करण 4.0 के लिए असेंबली मेनिफेस्ट है:

Microsoft.SQLSERVER.CE.4.0.manifest :

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">

<assemblyIdentity 
       type="win32"
       name="Microsoft.SQLSERVER.CE.4.0"
       processorArchitecture="x86"
       version="4.0.0.0" />

<!-- OLEDB Provider -->
<file name = "sqlceoledb40.dll">
    <comClass
            description = "Microsoft SQL Server Compact OLE DB Provider for Windows"
            clsid="{2006C53A-C915-41EA-BAA9-9EAB3A1FBF97}"
            threadingModel = "Both"
            progid = "Microsoft.SQLSERVER.CE.OLEDB.4.0" />
</file>

<!-- Native flat engine library -->
<file name="sqlceme40.dll" />

<!-- Engine and Replication COM object -->
<file name="sqlceca40.dll">
    <comClass description="Active SSCE Engine Object"
            clsid="{68D45319-3702-4837-9F8E-DA6845D82482}"
            threadingModel="Both"
            progid="SSCE.Engine.4.0" />
    <comClass description="SSCE Error Object"
            clsid="{36228F21-B5C7-4054-8DC2-47D3E236E8B5}"
            threadingModel="Both"
            progid="SSCE.Error.4.0" />
    <comClass description="SSCE Param Object"
            clsid="{0B3A7B75-A9B0-4580-9AA5-1A7DA47AD1CB}"
            threadingModel="Both"
            progid="SSCE.Param.4.0" />
    <comClass description="Active SSCE Replication Object"
            clsid="{11D5B2D4-26A4-44F5-A48B-0FAC3A919ED8}"
            threadingModel="Both"
            progid="SSCE.Replication.4.0" />
    <comClass description="Active SSCE remote data access Object"
            clsid="{58BC9AD6-BF11-40B3-9AB1-E3F2ED784C08}"
            threadingModel="Both"
            progid="SSCE.RemoteDataAccess.4.0" />

    <typelib tlbid="{CE4AACFA-3CFD-4028-B2D9-F272314F07C8}"
            version="4.0" 
            helpdir=""/>
</file>

<comInterfaceExternalProxyStub 
    name="ISSCEEngine"
    iid="{10EC3E45-0870-4D7B-9A2D-F4F81B6B7FA2}"
    proxyStubClsid32="{00020424-0000-0000-C000-000000000046}"
    baseInterface="{00000000-0000-0000-C000-000000000046}"
    tlbid = "{CE4AACFA-3CFD-4028-B2D9-F272314F07C8}" />

<comInterfaceExternalProxyStub 
    name="ISSCEError"
    iid="{31155A3B-871D-407F-9F73-DEBFAC7EFBE3}"
    proxyStubClsid32="{00020424-0000-0000-C000-000000000046}"
    baseInterface="{00000000-0000-0000-C000-000000000046}"
    tlbid = "{CE4AACFA-3CFD-4028-B2D9-F272314F07C8}" />

<comInterfaceExternalProxyStub 
    name="ISSCERDA"
    iid="{4F04F79D-1FF1-4DCD-802B-3D51B9356C14}"
    proxyStubClsid32="{00020424-0000-0000-C000-000000000046}"
    baseInterface="{00000000-0000-0000-C000-000000000046}"
    tlbid = "{CE4AACFA-3CFD-4028-B2D9-F272314F07C8}" />

<comInterfaceExternalProxyStub 
    name="ISSCEParams"
    iid="{A78AFF90-049C-41EC-B1D8-665968AAC4A6}"
    proxyStubClsid32="{00020424-0000-0000-C000-000000000046}"
    baseInterface="{00000000-0000-0000-C000-000000000046}"
    tlbid = "{CE4AACFA-3CFD-4028-B2D9-F272314F07C8}" />

<comInterfaceExternalProxyStub 
    name="ISSCEParam"
    iid="{A9876C60-2667-44E5-89DB-E9A46ED392C0}"
    proxyStubClsid32="{00020424-0000-0000-C000-000000000046}"
    baseInterface="{00000000-0000-0000-C000-000000000046}"
    tlbid = "{CE4AACFA-3CFD-4028-B2D9-F272314F07C8}" />

<comInterfaceExternalProxyStub 
    name="ISSCEErrors"
    iid="{C40143CA-E9F9-4FF4-B8B4-CC02C064FC1B}"
    proxyStubClsid32="{00020424-0000-0000-C000-000000000046}"
    baseInterface="{00000000-0000-0000-C000-000000000046}"
    tlbid = "{CE4AACFA-3CFD-4028-B2D9-F272314F07C8}" />

<comInterfaceExternalProxyStub 
    name="ISSCEMerge"
    iid="{C6EB397F-D585-428D-A4F4-454A1842CB47}"
    proxyStubClsid32="{00020424-0000-0000-C000-000000000046}"
    baseInterface="{00000000-0000-0000-C000-000000000046}"
    tlbid = "{CE4AACFA-3CFD-4028-B2D9-F272314F07C8}" />

<file name="sqlceqp40.dll" />
<file name="sqlcese40.dll" />
<file name="sqlcecompact40.dll" />
<file name="sqlceer40EN.dll" />

</assembly>

एक अंतिम गोचा यह है कि, उसी तरह हमारे पास Microsoft.SQLSERVER.CE.4.0 नामक असेंबली पर निर्भरता है। , SQL सर्वर कॉम्पैक्ट संस्करण 4.0 बदले में Microsoft.VC90.CRT नामक असेंबली पर निर्भर है। . सौभाग्य से इस असेंबली की एक प्रति के साथ SQLCE जहाजों की आपकी स्थापना:

📁Microsoft.VC90.CRT
├──📄Microsoft.VC90.CRT.manifest 
╰──📄msvcr90.dll

इसका मतलब है कि अंतिम निर्देशिका संरचना है:

📁C:\
╰──📁Users
   ╰──📁Ian
      ╰──📁AppData
         ╰──📁Local
            ╰──📁Hyperion Pro
               ├──📄Hyperion.exe
               ├──📄Hyperion.exe.manifest
               ╰──📁Microsoft.SQLSERVER.CE.4.0
                  ├──📄Microsoft.SQLSERVER.CE.4.0.manifest
                  ├──📄sqlceme40.dll
                  ├──📄sqlceca40.dll
                  ├──📄sqlceoledb40.dll
                  ├──📄sqlcese40.dll
                  ├──📄sqlceqp40.dll
                  ├──📄sqlcecompact40.dll
                  ├──📄sqlceer40en.dll
                  ╰──📁Microsoft.VC90.CRT
                     ├──📄Microsoft.VC90.CRT.manifest
                     ╰──📄msvcr90.dll
               


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. पेश है प्लेबैक—स्पॉटलाइट क्लाउड के लिए टाइम डायग्नोसिस में नया बिंदु

  2. डेटाबेस तालिका से यादृच्छिक रिकॉर्ड (टी-एसक्यूएल)

  3. एलिमिनेशन में शामिल हों:जब SQL सर्वर अनावश्यक टेबल्स को हटाता है

  4. दिनांक और नल के अनुसार SQL सर्वर ऑर्डर अंतिम

  5. SQL सर्वर में FORMAT () का उपयोग करते समय अपरिवर्तनीय संस्कृति को कैसे निर्दिष्ट करें