উত্তর:
পরিষেবা প্রকল্পে নিম্নলিখিতটি করুন:
এখন আপনার একটি সেটআপ প্রকল্প করা দরকার to সবচেয়ে ভাল কাজটি হ'ল সেটআপ উইজার্ডটি ব্যবহার করা।
আপনার সমাধানটিতে ডান ক্লিক করুন এবং একটি নতুন প্রকল্প যুক্ত করুন: যুক্ত করুন> নতুন প্রকল্প> সেটআপ এবং স্থাপনা প্রকল্পসমূহ> সেটআপ উইজার্ড
ক। ভিজ্যুয়াল স্টুডিওর বিভিন্ন সংস্করণের জন্য এটি কিছুটা পরিবর্তিত হতে পারে। খ। ভিজ্যুয়াল স্টুডিও 2010 এটিতে অবস্থিত: টেমপ্লেটগুলি ইনস্টল করুন> অন্যান্য প্রকল্পের প্রকারগুলি> সেটআপ এবং স্থাপনা> ভিজ্যুয়াল স্টুডিও ইনস্টলার
দ্বিতীয় ধাপে "উইন্ডোজ অ্যাপ্লিকেশনটির জন্য একটি সেটআপ তৈরি করুন" নির্বাচন করুন।
তৃতীয় ধাপে, "প্রাথমিক আউটপুট ..." নির্বাচন করুন
শেষ করতে ক্লিক করুন।
সঠিক আউটপুট অন্তর্ভুক্ত রয়েছে তা নিশ্চিত করার জন্য আপনার ইনস্টলারটি সম্পাদনা করুন।
আপনার সমাধানে ইনস্টলার প্রকল্পটি ডান ক্লিক করে ইনস্টলার আউটপুট নামটি সম্পাদনা করতে পারেন এবং বৈশিষ্ট্যগুলি নির্বাচন করতে পারেন। 'আউটপুট ফাইলের নাম:' আপনি যা খুশি তে পরিবর্তন করুন। পাশাপাশি ইনস্টলার প্রকল্পের নির্বাচন এবং বৈশিষ্ট্য উইন্ডোজ দিকে তাকিয়ে করার মাধ্যমে, আপনি সম্পাদনা করতে পারেন Product Name
, Title
, Manufacturer
, ইত্যাদি ...
এরপরে আপনার ইনস্টলারটি তৈরি করুন এবং এটি একটি এমএসআই এবং একটি সেটআপ.এক্সই উত্পাদন করবে। আপনার পরিষেবা মোতায়েন করতে আপনি যে কোনওটিই ব্যবহার করতে চান তা চয়ন করুন।
Service name contains invalid characters, is empty, or is too long (max length = 80)
ইনস্টলার যুক্ত করার সময় ত্রুটি পান তবে ধূসর অঞ্চলে আবার ডান ক্লিক করুন, সম্পত্তিগুলিতে যান এবং নিশ্চিত করুন যে পরিষেবার নাম মান সেট করা আছে।
আমি আমার পরিষেবা প্রকল্পে ইনস্টলার ক্লাস যুক্ত করার জন্য কেলসির প্রথম সেটগুলি অনুসরণ করি, তবে এমএসআই বা সেটআপ.এক্সই ইনস্টলার তৈরি করার পরিবর্তে আমি পরিষেবাটি স্ব-ইনস্টল / আনইনস্টল করি all আমার পরিষেবাগুলির একটির থেকে নমুনা কোডের একটি বিট এখানে আপনি প্রাথমিক পয়েন্ট হিসাবে ব্যবহার করতে পারেন।
public static int Main(string[] args)
{
if (System.Environment.UserInteractive)
{
// we only care about the first two characters
string arg = args[0].ToLowerInvariant().Substring(0, 2);
switch (arg)
{
case "/i": // install
return InstallService();
case "/u": // uninstall
return UninstallService();
default: // unknown option
Console.WriteLine("Argument not recognized: {0}", args[0]);
Console.WriteLine(string.Empty);
DisplayUsage();
return 1;
}
}
else
{
// run as a standard service as we weren't started by a user
ServiceBase.Run(new CSMessageQueueService());
}
return 0;
}
private static int InstallService()
{
var service = new MyService();
try
{
// perform specific install steps for our queue service.
service.InstallService();
// install the service with the Windows Service Control Manager (SCM)
ManagedInstallerClass.InstallHelper(new string[] { Assembly.GetExecutingAssembly().Location });
}
catch (Exception ex)
{
if (ex.InnerException != null && ex.InnerException.GetType() == typeof(Win32Exception))
{
Win32Exception wex = (Win32Exception)ex.InnerException;
Console.WriteLine("Error(0x{0:X}): Service already installed!", wex.ErrorCode);
return wex.ErrorCode;
}
else
{
Console.WriteLine(ex.ToString());
return -1;
}
}
return 0;
}
private static int UninstallService()
{
var service = new MyQueueService();
try
{
// perform specific uninstall steps for our queue service
service.UninstallService();
// uninstall the service from the Windows Service Control Manager (SCM)
ManagedInstallerClass.InstallHelper(new string[] { "/u", Assembly.GetExecutingAssembly().Location });
}
catch (Exception ex)
{
if (ex.InnerException.GetType() == typeof(Win32Exception))
{
Win32Exception wex = (Win32Exception)ex.InnerException;
Console.WriteLine("Error(0x{0:X}): Service not installed!", wex.ErrorCode);
return wex.ErrorCode;
}
else
{
Console.WriteLine(ex.ToString());
return -1;
}
}
return 0;
}
Windows Application
এবং স্টার্টআপ অবজেক্ট: এ ডিফল্ট হয়েছে (none)
। আমাকে আউটপুট টাইপটি পরিবর্তন করতে হয়েছিল Console Application
এবং আমার স্টার্টআপ অবজেক্টটি সেট করতে হয়েছিল myservice.Program
। আমি অজানা সম্পর্কে র্যামফিকেশনগুলি যদি থাকতে পারে তবে দয়া করে পরামর্শ দিন।
না ক্যালসি, না ব্রেন্ডন সমাধানগুলি ভিজ্যুয়াল স্টুডিও 2015 সম্প্রদায়ে আমার পক্ষে কাজ করে না।
ইনস্টলার দিয়ে কীভাবে পরিষেবা তৈরি করবেন তা আমার এখানে সংক্ষিপ্ত পদক্ষেপ:
->
New->
Projectডাবল ক্লিক পরিষেবা ইনস্টলার 1। ভিজ্যুয়াল স্টুডিও serviceInstaller1_AfterInstall
ইভেন্ট তৈরি করে । কোড লিখুন:
private void serviceInstaller1_AfterInstall(object sender, InstallEventArgs e)
{
using (System.ServiceProcess.ServiceController sc = new
System.ServiceProcess.ServiceController(serviceInstaller1.ServiceName))
{
sc.Start();
}
}
সমাধান তৈরি করুন। প্রকল্পে ডান ক্লিক করুন এবং 'ফাইল এক্সপ্লোরারে ফোল্ডার খুলুন' নির্বাচন করুন। বিন \ ডিবাগ এ যান ।
নীচের স্ক্রিপ্ট সহ ইনস্টল.বাট তৈরি করুন:
:::::::::::::::::::::::::::::::::::::::::
:: Automatically check & get admin rights
:::::::::::::::::::::::::::::::::::::::::
@echo off
CLS
ECHO.
ECHO =============================
ECHO Running Admin shell
ECHO =============================
:checkPrivileges
NET FILE 1>NUL 2>NUL
if '%errorlevel%' == '0' ( goto gotPrivileges ) else ( goto getPrivileges )
:getPrivileges
if '%1'=='ELEV' (shift & goto gotPrivileges)
ECHO.
ECHO **************************************
ECHO Invoking UAC for Privilege Escalation
ECHO **************************************
setlocal DisableDelayedExpansion
set "batchPath=%~0"
setlocal EnableDelayedExpansion
ECHO Set UAC = CreateObject^("Shell.Application"^) > "%temp%\OEgetPrivileges.vbs"
ECHO UAC.ShellExecute "!batchPath!", "ELEV", "", "runas", 1 >> "%temp%\OEgetPrivileges.vbs"
"%temp%\OEgetPrivileges.vbs"
exit /B
:gotPrivileges
::::::::::::::::::::::::::::
:START
::::::::::::::::::::::::::::
setlocal & pushd .
cd /d %~dp0
%windir%\Microsoft.NET\Framework\v4.0.30319\InstallUtil /i "WindowsService1.exe"
pause
/i
করতে /u
)ভিএস2017 এর জন্য আপনাকে "মাইক্রোসফ্ট ভিজ্যুয়াল স্টুডিও 2017 ইনস্টলার প্রকল্পগুলি" ভিএস এক্সটেনশন যুক্ত করতে হবে। এটি আপনাকে অতিরিক্ত ভিজ্যুয়াল স্টুডিও ইনস্টলার প্রকল্পের টেম্পলেট দেবে। https://marketplace.visualstudio.com/items?itemName=VisualStudioProductTeam.MicrosoftVisualStudio2017InstallerProjects#overview
উইন্ডোজ পরিষেবাটি ইনস্টল করতে আপনি একটি নতুন সেটআপ উইজার্ড টাইপ প্রকল্প যুক্ত করতে পারেন এবং কেলসির উত্তর https://stackoverflow.com/a/9021107/1040040 থেকে প্রাপ্ত পদক্ষেপগুলি অনুসরণ করতে পারেন
উইন্ডোজ ইনস্টলার সম্প্রদায় দ্বারা ইনস্টলটল ক্লাসগুলি (সার্ভিস ইনস্টলার) একটি অ্যান্টি-প্যাটার্ন হিসাবে বিবেচিত হয়। এটি একটি ভঙ্গুর, প্রক্রিয়াধীন নয়, চাকাটির পুনর্নবীকরণ যা উইন্ডোজ ইনস্টলার দ্বারা পরিষেবাগুলির জন্য অন্তর্নির্মিত সমর্থন রয়েছে এই সত্যটিকে উপেক্ষা করে।
ভিজ্যুয়াল স্টুডিও স্থাপনার প্রকল্পগুলি (ভিজ্যুয়াল স্টুডিওর পরবর্তী প্রকাশেও অত্যন্ত সম্মানিত এবং অবহেলিত নয়) পরিষেবার জন্য স্থানীয় সমর্থন নেই native তবে তারা মার্জ মডিউলগুলি গ্রাস করতে পারে। সুতরাং আমি এই ব্লগ নিবন্ধটি একবার দেখে নেব কীভাবে উইন্ডোজ ইনস্টলার এক্সএমএল ব্যবহার করে মার্জ মডিউল তৈরি করতে হয় যা পরিষেবাটি প্রকাশ করতে পারে এবং তারপরে আপনার ভিডিপিআরজে সমাধানে এই মার্জ মডিউলটি গ্রাস করে।
উইন্ডোজ ইনস্টলার এক্সএমএল - উইন্ডোজ পরিষেবাদি ব্যবহার করে ইনস্টলশিল্ড অগমেন্টিং