मैंने समाधान बना लिया है।
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