विंडोज सर्विस के लिए इनो सेटअप?


105

मेरे पास .Net विंडोज सेवा है। मैं उस विंडो सेवा को स्थापित करने के लिए एक इंस्टॉलर बनाना चाहता हूं।

मूल रूप से, इसे निम्नलिखित कार्य करना होगा:

  1. पैक installutil.exe(क्या यह आवश्यक है?)
  2. installutil.exeMyService.exe चलाएँ
  3. MyService प्रारंभ करें

इसके अलावा, मैं एक अनइंस्टॉलर प्रदान करना चाहता हूं जो निम्नलिखित कमांड चलाता है:

installutil.exe /u MyService.exe

इनो सेटअप का उपयोग कैसे करें?


मुझे लगता है कि आपको [रन] अनुभाग का उपयोग करने की आवश्यकता है। यहां
प्रीत संघ

जवाबों:


233

आपको इसकी आवश्यकता नहीं है installutil.exeऔर शायद आपके पास इसे पुनर्वितरित करने के अधिकार भी नहीं हैं।

यहाँ मैं इसे अपने आवेदन में कर रहा हूँ:

using System;
using System.Collections.Generic;
using System.Configuration.Install; 
using System.IO;
using System.Linq;
using System.Reflection; 
using System.ServiceProcess;
using System.Text;

static void Main(string[] args)
{
    if (System.Environment.UserInteractive)
    {
        string parameter = string.Concat(args);
        switch (parameter)
        {
            case "--install":
                ManagedInstallerClass.InstallHelper(new string[] { Assembly.GetExecutingAssembly().Location });
                break;
            case "--uninstall":
                ManagedInstallerClass.InstallHelper(new string[] { "/u", Assembly.GetExecutingAssembly().Location });
                break;
        }
    }
    else
    {
        ServiceBase.Run(new WindowsService());
    }
}

मूल रूप से आप ManagedInstallerClassअपने उदाहरण के रूप में दिखाया गया है का उपयोग करके अपने दम पर स्थापित / स्थापना रद्द करने के लिए आपकी सेवा हो सकती है ।

तो फिर यह कुछ इस तरह से अपने InnoSetup स्क्रिप्ट में जोड़ने की बात है:

[Run]
Filename: "{app}\MYSERVICE.EXE"; Parameters: "--install"

[UninstallRun]
Filename: "{app}\MYSERVICE.EXE"; Parameters: "--uninstall"

3
आप कोशिश कर सकते हैं Filename: "net.exe"; Parameters: "start WinServ"। यदि यह काम नहीं करता है, तो आप बस अपने c # एप्लिकेशन में एक और स्विच -स्टार्ट जोड़ सकते हैं और ServiceController क्लास ( msdn.microsoft.com/en-us/library/… ) का उपयोग करके प्रोग्राम से सीधे विंडोज़ सेवा शुरू कर सकते हैं ।
लूबोस हैस्को

2
+1 अच्छा है। यह भी देखें stackoverflow.com/questions/255056/...
रूबेन Bartelink

7
सी # नौसिखिया (मेरे जैसे) के लिए, आप एक जोड़ने के लिए या तो की जरूरत using System.Reflection;या परिवर्तन Assemblyकरने के लिए System.Reflection.Assemblyउपरोक्त कोड में।
Rlandster

1
InstallUtil डॉट नेट फ्रेमवर्क का एक हिस्सा है, इसे पुनर्वितरित करने के लिए आपको "अधिकारों" की आवश्यकता नहीं है, यह पहले से ही आपके लक्षित सिस्टम पर मौजूद है (यह मानते हुए कि आप अपने ऐप को पाठ्यक्रम के पहले स्थान पर चला सकते हैं)
एंड्रयू सविनाख

10
4.5 में इंस्टा हेल्पर विधि के बारे में प्रलेखन से - "यह एपीआई .NET फ्रेमवर्क के बुनियादी ढांचे का समर्थन करता है और इसका उपयोग सीधे अपने कोड से करने का इरादा नहीं है।" System.InvalidOperationException प्राप्त करने के बाद की खोज की।
ब्राच

8

यहाँ है कि मैंने यह कैसे किया:

Exec(ExpandConstant('{dotnet40}\InstallUtil.exe'), ServiceLocation, '', SW_HIDE, ewWaitUntilTerminated, ResultCode);

जाहिर है, इनो सेटअप में आपके सिस्टम पर .NET फ़ोल्डर को संदर्भित करने के लिए निम्नलिखित स्थिरांक हैं:

  • {} Dotnet11
  • {} Dotnet20
  • {} Dotnet2032
  • {} Dotnet2064
  • {} Dotnet40
  • {} Dotnet4032
  • {} Dotnet4064

अधिक जानकारी यहाँ उपलब्ध है


5

आप उपयोग कर सकते हैं

Exec(
    ExpandConstant('{sys}\sc.exe'),
    ExpandConstant('create "MyService" binPath= {app}\MyService.exe start= auto DisplayName= "My Service" obj= LocalSystem'), 
    '', 
    SW_HIDE, 
    ewWaitUntilTerminated, 
    ResultCode
    )

एक सेवा बनाने के लिए। " Sc.exe " देखें कि कैसे शुरू करें, रोकें, सेवा की स्थिति जांचें, सेवा हटाएं, आदि।


2

यदि आप उपयोगकर्ता के उन्नयन के समय रिबूट से बचना चाहते हैं तो आपको exe को कॉपी करने से पहले सेवा को रोकने और उसके बाद फिर से शुरू करने की आवश्यकता है।

सेवा में ऐसा करने के लिए कुछ स्क्रिप्ट फ़ंक्शंस हैं - एक सेवा शुरू करने, बंद करने, स्थापित करने, एक सेवा निकालने के लिए फ़ंक्शंस


आपके लिंक किए गए लेख में उपयोग किए गए फ़ंक्शन के प्रोटोटाइप ठीक से अनुवादित नहीं हैं और उनका उपयोग भी सही नहीं है (उदाहरण के लिए सेवा शुरू होने, रुकने आदि का इंतजार नहीं करना है)।
तिलामा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.