2009-06-15 12 views
7

मैं एसक्यूएल सर्वर पर एक सेवा निर्भरता को परिभाषित करने के लिए निम्न कोड का उपयोग कर रहा साथ काम करता है में SQL सर्वर पर निर्भरता को परिभाषित कर सकते हैं:कैसे मैं एक खिड़कियों सेवा है कि SQL सर्वर एक्सप्रेस

serviceInstaller.StartType = ServiceStartMode.Automatic; 
serviceInstaller.ServicesDependedOn = new[] { "MSSQLSERVER" }; 
Installers.Add(serviceInstaller); 
Installers.Add(processInstaller); 

यह दो मशीनों में काम करता है , SQL सर्वर के साथ एक और दूसरा SQL सर्वर एक्सप्रेस के साथ। लेकिन जब मैंने क्लाइंट सर्वर में सेवा स्थापित की, तो यह विफल हो गया क्योंकि SQL सर्वर एक्सप्रेस सेवा का नाम अलग था (SQLSERVEREXPRESS)। क्या दोनों स्थितियों में काम करने वाली निर्भरता को परिभाषित करने का कोई तरीका है? धन्यवाद।

उत्तर

11

आपको उचित सेवा नाम का उपयोग करने की आवश्यकता है। डिफ़ॉल्ट उदाहरणों के लिए SQL सेवा नाम MSSQLSERVER है, किसी नामित उदाहरण के लिए SQLSERVEREXPRESS (कुछ) एक्सप्रेस इंस्टेंस और MSSQL$<instancename>। चूंकि नाम मूल रूप से गतिशील है, इसलिए सबसे अच्छा विकल्प SQL सर्वर सेवाओं को गिनना है और सही नाम चुनना है, या यदि एकाधिक विकल्प मौजूद हैं तो उपयोगकर्ता को संकेत दें।

दुर्भाग्य से मैं स्थापित एसक्यूएल सर्वर उदाहरणों को गिनने के लिए किसी भी एपीआई से अवगत नहीं हूं। यहां तक ​​कि MS support resorts to querying the registry:

प्रश्न: मैं किस तरह तय करते हैं कि कितने SQL सर्वर के उदाहरणों कंप्यूटर पर स्थापित कर रहे हैं?

एक: सभी एसक्यूएल सर्वर के नाम एक कंप्यूटर पर उदाहरणों InstalledInstances मूल्य जो निम्नलिखित रजिस्ट्री कुंजी के अंतर्गत स्थित है से पाया जा सकता है: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server

0

यहाँ पर एक विस्तार है क्या Remus Rusanu proposed:

//Source: https://stackoverflow.com/a/7139986/16911 
//Get all installed named instances. 
var localMachine = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64); 
var rk = localMachine.OpenSubKey("SOFTWARE\\Microsoft\\Microsoft SQL Server"); 
var instances = (String[])rk.GetValue("InstalledInstances"); 

List<String> sqlServices = instances.Select(x => "MSSQL$" + x).ToList(); 

//Add SQLSERVEREXPRESS and MSSQLSERVER, if they exist. 
if(DoesServiceExist("SQLSERVEREXPRESS")) { 
    sqlServices.Add("SQLSERVEREXPRESS"); 
} 

if(DoesServiceExist("MSSQLSERVER")) { 
    sqlServices.Add("MSSQLSERVER"); 
} 

service.ServicesDependedOn = sqlServices.ToArray(); 

मैं पूरी तरह से गैर नामित उदाहरणों का परीक्षण करने के लिए, या diff परीक्षण करने के लिए एक मौका नहीं मिला था x64/x86, आदि के बीच erences

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