जवाबों:
सेवा परियोजना में निम्नलिखित कार्य करें:
अब आपको एक सेटअप प्रोजेक्ट बनाने की आवश्यकता है। सबसे अच्छी बात सेटअप विज़ार्ड का उपयोग करना है।
अपने समाधान पर राइट क्लिक करें और एक नया प्रोजेक्ट जोड़ें:> नया प्रोजेक्ट> सेटअप और परिनियोजन प्रोजेक्ट> सेटअप विज़ार्ड जोड़ें
ए। यह विजुअल स्टूडियो के विभिन्न संस्करणों के लिए थोड़ा भिन्न हो सकता है। ख। विजुअल स्टूडियो 2010 यह इसमें स्थित है: टेम्प्लेट स्थापित करें> अन्य प्रोजेक्ट प्रकार> सेटअप और परिनियोजन> विज़ुअल स्टूडियो इंस्टॉलर
दूसरे चरण पर "विंडोज एप्लिकेशन के लिए एक सेटअप बनाएं" चुनें।
तीसरे चरण पर, "से प्राथमिक उत्पादन ..." चुनें
फिनिश के माध्यम से क्लिक करें।
अगला यह सुनिश्चित करने के लिए अपने इंस्टॉलर को संपादित करें कि सही आउटपुट शामिल है।
आप इंस्टॉलर आउटपुट नाम को अपने समाधान में इंस्टॉलर प्रोजेक्ट पर राइट क्लिक करके और गुणों का चयन करके संपादित कर सकते हैं। जो भी आप चाहते हैं, 'आउटपुट फ़ाइल नाम:' बदलें। साथ ही संस्थापक परियोजना का चयन करके और गुण खिड़कियों को देख कर, आप संपादित कर सकते हैं Product Name
, Title
, Manufacturer
, आदि ...
अगला अपने इंस्टॉलर का निर्माण करें और यह एक MSI और एक setup.exe का उत्पादन करेगा। जो भी आप अपनी सेवा को तैनात करने के लिए उपयोग करना चाहते हैं उसे चुनें।
Service name contains invalid characters, is empty, or is too long (max length = 80)
इंस्टॉलर को जोड़ने के दौरान कोई त्रुटि मिलती है , तो फिर से ग्रे क्षेत्र में राइट क्लिक करें, गुण पर जाएं और यह सुनिश्चित करें कि सेवा नाम मान सेट है।
मैं अपनी सेवा परियोजना में इंस्टॉलर कक्षाओं को जोड़ने के लिए केल्सी के पहले सेट का पालन करता हूं, लेकिन मैं MSI या setup.exe इंस्टॉलर बनाने के बजाय सेवा को स्वयं स्थापित / अनइंस्टॉल कर रहा हूं। यहां मेरी सेवाओं में से एक नमूना कोड है जिसे आप एक प्रारंभिक बिंदु के रूप में उपयोग कर सकते हैं।
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डबल क्लिक करें serviceInstaller1। विजुअल स्टूडियो serviceInstaller1_AfterInstall
इवेंट बनाता है । कोड लिखें:
private void serviceInstaller1_AfterInstall(object sender, InstallEventArgs e)
{
using (System.ServiceProcess.ServiceController sc = new
System.ServiceProcess.ServiceController(serviceInstaller1.ServiceName))
{
sc.Start();
}
}
समाधान बनाएँ। प्रोजेक्ट पर राइट क्लिक करें और 'फाइल एक्सप्लोरर में ओपन फोल्डर' चुनें। बिन \ _ डिबग पर जाएं ।
नीचे स्क्रिप्ट के साथ install.bat बनाएँ:
:::::::::::::::::::::::::::::::::::::::::
:: 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
) में बदलेंVS2017 के लिए आपको "Microsoft Visual Studio 2017 इंस्टालर प्रोजेक्ट्स" VS एक्सटेंशन को जोड़ना होगा। यह आपको अतिरिक्त विजुअल स्टूडियो इंस्टॉलर प्रोजेक्ट टेम्पलेट देगा। https://marketplace.visualstudio.com/items?itemName=VisualStudioProductTeam.MicrosoftVisualStudio2017InstallerProjects#overview
विंडोज़ सेवा को स्थापित करने के लिए आप एक नया सेटअप विज़ार्ड प्रकार परियोजना जोड़ सकते हैं और केल्सी के उत्तर https://stackoverflow.com/a/9021107/1040040 से चरणों का पालन कर सकते हैं
InstallUtil क्लासेस (ServiceInstaller) को विंडोज इंस्टालर समुदाय द्वारा एक विरोधी पैटर्न माना जाता है। यह एक नाजुक, प्रक्रिया से बाहर है, पहिया को फिर से स्थापित करना जो इस तथ्य को अनदेखा करता है कि विंडोज इंस्टालर ने सेवाओं के लिए अंतर्निहित समर्थन किया है।
विजुअल स्टूडियो परिनियोजन प्रोजेक्ट्स (विजुअल स्टूडियो की अगली रिलीज में भी उच्च माना और नहीं हटाया गया) सेवाओं के लिए मूल समर्थन नहीं है। लेकिन वे मर्ज मॉड्यूल का उपभोग कर सकते हैं। इसलिए मैं इस ब्लॉग लेख पर एक नज़र डालूंगा कि यह समझने के लिए कि विंडोज इंस्टॉलर एक्सएमएल का उपयोग करके मर्ज मॉड्यूल कैसे बनाया जाए जो सेवा को व्यक्त कर सकता है और फिर आपके वीडीपीआरओजे समाधान में उस मर्ज मॉड्यूल का उपभोग कर सकता है।
विंडोज इंस्टॉलर XML - विंडोज सर्विसेज का उपयोग करके इंस्टालेशन को स्थापित करना