2009-03-26 10 views
8

मैं कैसे पता लगा सकता हूं कि एसक्यूएल सर्वर एक्सप्रेस स्थापित है और एक WiX इंस्टॉलर में मशीन पर चल रहा है?वाईएक्स इंस्टॉलर में SQL सर्वर एक्सप्रेस का पता लगाने के लिए कैसे करें

मैं अपने एप्लिकेशन को इंस्टॉल करने से पहले जांचना चाहता हूं और यदि यह इंस्टॉल नहीं है और चल रहा है, तो उपयोगकर्ता को यह सूचित करने के लिए कि इसे मेरे एप्लिकेशन को इंस्टॉल करने से पहले इसे इंस्टॉल करना है।

<Property Id="SQLSERVER"> 
    <RegistrySearch Id="SQLServer" Root="HKLM" Key="SOFTWARE\Microsoft\Microsoft Sql Server" Type="raw" Name="InstalledInstances"/> 
</Property> 

मैं एक रजिस्ट्री खोज परिभाषित करते हैं, और उसके बाद अपने मूल्य की जाँच:

उत्तर

11

ठीक है, मैं परीक्षण और त्रुटि विकल्प है कि काम करता है के द्वारा पाया

<Condition Message="You don't have SQL Server installed."> 
    <![CDATA[SQLSERVER >< SQLEXPRESS]]> 
</Condition> 
+0

बिल्कुल सही, बस एक ही समस्या को दबाएं। पहले मैंने सोचा था कि यह SQL सर्वर मानक और एक्सप्रेस दोनों स्थापित करने के मामले में काम नहीं करेगा, लेकिन फिर "><" जो कि खोदने के बाद मुझे पता चला कि बाएं सही हैं, अजीब रूप से मैं नहीं कर सका Wix दस्तावेज़ों में उल्लिखित उस सशर्त अभिव्यक्ति ऑपरेटर का उल्लेख पाएं, लेकिन इसे यहां मिला: http://www.tramontana.co.hu/wix/lesson6.php। – Bittercoder

+0

आपको 64 बिट्स विंडोज संस्करण पर स्थापित किए गए इंस्टेंस मान नहीं मिलेगा। – jmayor

+0

आपको HKLM \ SOFT के बजाय Wow6432Node में बदलने की आवश्यकता है .. \ MSFT .. – jmayor

5

मैं करज़िस्तोफ समाधान (ऊपर) की कोशिश की - लेकिन कुछ मशीनों पर इस दृष्टिकोण का उपयोग करते समय यह सही ढंग से पता नहीं लगा था कि में एसक्यूएल एक्सप्रेस स्थापित नहीं है।

यह REG_MULTI_SZ इंस्टॉल किए गए इंस्टेंस रजिस्ट्री मान के मिशनलिंग के कारण होता है?

जैसा कि मैं यह देखने के लिए जांच रहा था कि मुझे इंस्टॉलर में एसक्यूएल सर्वर एक्सप्रेस सेवा को रोकने/पुनरारंभ करने की आवश्यकता है, इसलिए मैंने इसके बजाय बस इसके खिलाफ जांच करने का फैसला किया - तो यहां मेरा विकल्प है, जहां मैं इसके बजाय सेवा की जांच करता हूं:

<Property Id="SQLEXPRESSINSTALLED" > 
    <RegistrySearch Id="IsSqlExpressServiceInstalled" Root="HKLM" Key="SYSTEM\CurrentControlSet\services\MSSQL$SQLEXPRESS" Name="Description" Type="raw" Win64="no"/> 
</Property>  

<Condition Message="Express Not Installed">SQLEXPRESSINSTALLED</Condition> 

<Condition Message="Express Installed">NOT SQLEXPRESSINSTALLED</Condition> 

एक हैक के बिट, लेकिन हमेशा हालत गुजर रहा था अच्छी तरह से हमारे ग्राहकों के लिए पर्याप्त काम करने के लिए

0

स्वीकार किए जाते हैं जवाब से ऊपर (बल्कि तो उदाहरण के लॉन्च की स्थिति ऊपर दिखाए गए घटकों के भीतर की स्थिति उपयोग कर रहे थे,) लगता है मेरे लिए। मुझे इसका उपयोग करके काम करना पड़ा:

<Property Id="SQLSERVER_INSTANCE"> 
    <RegistrySearch Id="SQLServerRegSearch" Root="HKLM" Key="SOFTWARE\Microsoft\Microsoft Sql Server\Instance Names\SQL" Type="raw" Name="SQLEXPRESS"/> 
</Property> 
<Condition Message="You don't have SQL Server installed."> 
    <![CDATA[SQLSERVER_INSTANCE]]> 
</Condition> 
+0

सभी उत्तर एक ही धारणा को प्रतीत करते हैं - कि SQL एक्सप्रेस इंस्टेंस 'SQLEXPRESS' के इंस्टेंस नाम के साथ स्थापित है। जबकि वह * डिफ़ॉल्ट * है, यह परिवर्तनीय है। –

+0

यह सच है, इसलिए SQLEXPRESS के स्थान पर आपको उस इंस्टेंस नाम की जांच करनी चाहिए जो आपको चाहिए, जो कुछ भी हो। – patrickbadley

संबंधित मुद्दे