উইন্ডোজ সেবার জন্য ইনো সেটআপ?


105

আমার কাছে নেট নেট উইন্ডোজ পরিষেবা আছে। আমি উইন্ডোজ পরিষেবাটি ইনস্টল করতে একটি ইনস্টলার তৈরি করতে চাই।

মূলত, এটি নিম্নলিখিত করতে হবে:

  1. প্যাক installutil.exe(এটি প্রয়োজনীয়?)
  2. installutil.exeমাই সার্ভিস.অ্যাক্স চালান
  3. মাই সার্ভিস শুরু করুন

এছাড়াও, আমি একটি আনইনস্টলার সরবরাহ করতে চাই যা নিম্নলিখিত কমান্ডটি চালায়:

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আমার উদাহরণে প্রদর্শিত হিসাবে ব্যবহার করে নিজেই ইনস্টল / আনইনস্টল করতে পারেন ।

তারপরে এটি আপনার ইনোসেটআপ স্ক্রিপ্টে কিছু যুক্ত করার বিষয় just

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

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

3
আপনি চেষ্টা করতে পারেন Filename: "net.exe"; Parameters: "start WinServ"। যদি এটি কাজ না করে, আপনি কেবল নিজের সি # অ্যাপ্লিকেশনটিতে আরও একটি স্যুইচ - স্টার্ট যুক্ত করতে পারেন এবং সার্ভিসকন্ট্রোলার ক্লাস ( এমএসডিএন.মাইক্রোসফট / en-us / library/… ) ব্যবহার করে প্রোগ্রাম থেকে সরাসরি উইন্ডোজ পরিষেবা শুরু করতে পারেন ।
lubos hasko

2
+1 সুন্দর। আরও দেখুন stackoverflow.com/questions/255056/...
রুবেন Bartelink

7
সি # নব্যফাইটের জন্য (আমার মতো), আপনাকে হয় উপরের কোডে একটি যুক্ত করতে using System.Reflection;বা পরিবর্তন Assemblyকরতে হবে System.Reflection.Assembly
rlandter

1
ইনস্টলটলটি ডট নেট কাঠামোর একটি অংশ, এটি পুনরায় বিতরণের জন্য আপনার "অধিকার" দরকার নেই, এটি ইতিমধ্যে আপনার টার্গেট সিস্টেমে উপস্থিত রয়েছে (ধরে নিলে আপনি অবশ্যই প্রথম অ্যাপে চালিয়ে যেতে পারেন)
অ্যান্ড্রু সাভিনিখ

10
4.5 এ ইনস্টলহেল্পার পদ্ধতি সম্পর্কে নথি থেকে - "এই এপিআই .NET ফ্রেমওয়ার্ক অবকাঠামো সমর্থন করে এবং আপনার কোড থেকে সরাসরি ব্যবহার করার উদ্দেশ্যে নয়।" System.In अवैधOperationException প্রাপ্তির পরে আবিষ্কার করা হয়েছে।
ব্রাচ

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

ব্যবহারকারী আপগ্রেড করার সময় আপনি যদি রিবুটগুলি এড়াতে চান তবে আপনাকে এক্সপিটি অনুলিপি করার আগে পরিষেবাটি বন্ধ করতে হবে এবং পরে আবার শুরু করতে হবে।

পরিষেবাতে এটি করার জন্য কিছু স্ক্রিপ্ট ফাংশন রয়েছে - কোনও পরিষেবা শুরু করার, থামানো, ইনস্টল করা, সরানোর কাজ Fun


আপনার লিঙ্কযুক্ত নিবন্ধে ব্যবহৃত ফাংশনগুলির প্রোটোটাইপগুলি যথাযথভাবে অনুবাদ করা হয়নি এবং সেগুলির ব্যবহারও সঠিক নয় (উদাহরণস্বরূপ পরিষেবাটি শুরু হওয়ার, থামানো ইত্যাদির অপেক্ষায় নেই)।
TLama
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.