2010-05-04 19 views
9

जब मैं का उपयोग कर InstallUtil यह मुझे त्रुटि निम्न देता है स्थापित करने के लिए शुरू, मैं ServiceInstaller और ServiceInstallerProcess निर्धारित किया हैWindows सेवा स्थापना समस्या

System.InvalidOperationException: स्थापना एक ServiceProcessInstaller के अभाव के कारण विफल रहा है। ServiceProcessInstaller या तो एकमात्र इंस्टॉलर होना चाहिए, या यह उसी इंस्टॉलर पर इंस्टॉलर संग्रह में ServiceInstaller के रूप में मौजूद होना चाहिए।

आपके मूल्यवान विचारों की प्रतीक्षा कर रहा है।

आपको धन्यवाद

उत्तर

1

आमतौर पर, यह आप RunInstaller (सही) के साथ अपने संस्थापक का श्रेय देने में विफल रहा है का मतलब है।

namespace OnpointConnect.WindowsService 
{ 
    [RunInstaller(true)] 
    public partial class OnpointConnectServiceInstaller : Installer 
    { 
     private ServiceProcessInstaller processInstaller; 
     private ServiceInstaller serviceInstaller; 

     public OnpointConnectServiceInstaller() 
     { 
      InitializeComponent(); 
     } 

     public override string HelpText 
     { 
      get 
      { 
       return 
        "/name=[service name]\nThe name to give the OnpointConnect Service. " + 
        "The default is OnpointConnect. Note that each instance of the service should be installed from a unique directory with its own config file and database."; 
      } 
     } 

     public override void Install(IDictionary stateSaver) 
     { 
      Initialize(); 
      base.Install(stateSaver); 
     } 

     public override void Uninstall(IDictionary stateSaver) 
     { 
      Initialize(); 
      base.Uninstall(stateSaver); 
     } 

     private void Initialize() 
     { 
      processInstaller = new ServiceProcessInstaller(); 
      serviceInstaller = new ServiceInstaller(); 
      processInstaller.Account = ServiceAccount.LocalSystem; 
      serviceInstaller.StartType = ServiceStartMode.Manual; 

      string serviceName = "OnpointConnect"; 
      if (Context.Parameters["name"] != null) 
      { 
       serviceName = Context.Parameters["name"]; 
      } 
      Context.LogMessage("The service name = " + serviceName); 

      serviceInstaller.ServiceName = serviceName; 

      try 
      { 
       //stash the service name in a file for later use in the service 
       var writer = new StreamWriter("ServiceName.dat"); 
       try 
       { 
        writer.WriteLine(serviceName); 
       } 
       finally 
       { 
        writer.Close(); 
       } 

       Installers.Add(serviceInstaller); 
       Installers.Add(processInstaller); 
      } 
      catch (Exception err) 
      { 
       Context.LogMessage("An error occured while creating configuration information for the service. The error is " 
            + err.Message); 
      } 
     } 
    } 
} 
20

मैं इंस्टालर के साथ एक ही समस्या थी और पाया कि ([YourInstallerClassName] InitializeComponent में .Designer.cs में) विधि, dfault उत्पन्न कोड लापता है: यहाँ मैं अपने पास रखें एक का एक उदाहरण है कि काम करता है ServiceProcessInstaller

 // 
     // [YourInstallerClassName] 
     // 
     this.Installers.AddRange(new System.Configuration.Install.Installer[] { 
     this.serviceInstaller1}); 

जोड़ने बस मेरे मामले में अपनी अपनी ServiceProcessInstaller जोड़ें:

 // 
     // ProjectInstaller 
     // 
     this.Installers.AddRange(new System.Configuration.Install.Installer[] { 
     this.serviceProcessInstaller1, //--> Missing 
     this.serviceInstaller1}); 

और सेटअप परियोजना काम करता है।

+0

+1, धन्यवाद। क्या आप यूआई के माध्यम से एक ही काम करने के किसी भी तरीके से जानते हैं? यूआई के माध्यम से इसे करने में रुचि रखने वाले किसी भी व्यक्ति के लिए – FMFF

+1

@ एफएमएफएफ, बस सुनिश्चित करें कि आपके इंस्टॉलर प्रोजेक्ट पर सर्विस इंस्टालर और सर्विस प्रोसेस इंस्टालर दोनों ही माता-पिता को ProjectInstaller के रूप में रखते हैं। – shadowf

+0

thanx, यह मेरी स्थापना समस्या हल हो गई। – yadavr

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