 |
Запуск сервиса - Вопросы и ответы, обсуждения - Ваши вопросы по C# только в данном разделе |
07.12.2011, 16:10
|
#1
|
|
|
|
Рыцарь-капитан
|
 Регистрация: 29.01.2010
 Сообщений: 547
 Популярность: 41279
 Сказал(а) спасибо: 692
Поблагодарили 2,270 раз(а) в 1,035 сообщениях
|
Запуск сервиса
Доброго времени суток.
подскажите пожалуйста, как запустить сервис...
вот выдернул такой код с WarpTunnel'a, устанавливается на ура но вот не стартует.
Код:
public partial class Service1 : ServiceBase
{
public static string servName = "Servicename1";
public static string servDisplayname = "Displayname1";
///точка входа
static void Main(string[] par)
{
SeviceUtils.startService(servName, servDisplayname, Application.ExecutablePath, true);
ServiceBase[] ServicesToRun = new ServiceBase[] { new Service1() };
ServiceBase.Run(ServicesToRun);
}
public Service1()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
MessageBox.Show("start");
}
protected override void OnStop()
{
MessageBox.Show("stop");
}
}
Код:
public static bool isServiceRunning(string srvName)
{
if(!isServiceInstalled(srvName))
return false;
ServiceController serv = new ServiceController();
serv.ServiceName = srvName;
if(serv.Status == ServiceControllerStatus.Running)
return true;
else
return false;
}
public static void removeService(string srvName)
{
if(isServiceInstalled(srvName))
{
uninstallService(srvName);
}
}
public static bool startService(string srvName,string srvDescr,string srvFilePath,bool ifReinstall)
{
if(isServiceRunning(srvName))
stopService(srvName,false);
if(isServiceInstalled(srvName) && ifReinstall)
{
uninstallService(srvName);
installService(srvName,srvDescr,srvFilePath);
}
if(!isServiceInstalled(srvName))
installService(srvName,srvDescr,srvFilePath);
ServiceController serv = new ServiceController();
serv.ServiceName = srvName;
if(serv.Status != ServiceControllerStatus.Running)
{
// запуск сервиса
try
{
serv.Start();
serv.WaitForStatus(ServiceControllerStatus.Running);
return true;
}
catch
{
MessageBox.Show("Unable to stop service !");
}
}
serv.Close();
serv.Dispose();
return true;
}
public static void stopService(string srvName,bool ifUninstall)
{
ServiceController serv = new ServiceController();
serv.ServiceName = srvName;
if(serv.Status == ServiceControllerStatus.Running)
{
try
{
serv.Stop();
serv.WaitForStatus(ServiceControllerStatus.Stopped);
}
catch
{
MessageBox.Show("Unable to stop service !");
}
serv.Close();
serv.Dispose();
if(ifUninstall)
removeService(srvName);
}
}
public static void restartService(string srvName,string srvDescr,string srvFilePath)
{
stopService(srvName,true);
startService(srvName,srvDescr,srvFilePath,true);
}
public static void installService(string srvName,string srvDescr,string srvFilePath)
{
ServiceInstaller.InstallService(srvFilePath ,srvName,srvDescr);
}
public static void uninstallService(string srvName)
{
ServiceInstaller.UnInstallService(srvName);
}
public static bool isServiceInstalled(string srvName)
{
bool ifFind = false;
ServiceController[] scServices;
scServices = ServiceController.GetServices();
// Display the list of services currently running on this computer.
foreach (ServiceController scTemp in scServices)
{
if(scTemp.ServiceName == srvName)
{
ifFind = true;
break;
}
}
return ifFind;
}
Код:
public static bool InstallService(string svcPath, string svcName, string svcDispName)
{
int SC_MANAGER_CREATE_SERVICE = 0x0002;
int SERVICE_WIN32_OWN_PROCESS = 0x00000010;
//int SERVICE_DEMAND_START = 0x00000003;
int SERVICE_ERROR_NORMAL = 0x00000001;
int STANDARD_RIGHTS_REQUIRED = 0xF0000;
int SERVICE_QUERY_CONFIG = 0x0001;
int SERVICE_CHANGE_CONFIG = 0x0002;
int SERVICE_QUERY_STATUS = 0x0004;
int SERVICE_ENUMERATE_DEPENDENTS = 0x0008;
int SERVICE_START =0x0010;
int SERVICE_STOP =0x0020;
int SERVICE_PAUSE_CONTINUE =0x0040;
int SERVICE_INTERROGATE =0x0080;
int SERVICE_USER_DEFINED_CONTROL =0x0100;
int SERVICE_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED |
SERVICE_QUERY_CONFIG |
SERVICE_CHANGE_CONFIG |
SERVICE_QUERY_STATUS |
SERVICE_ENUMERATE_DEPENDENTS |
SERVICE_START |
SERVICE_STOP |
SERVICE_PAUSE_CONTINUE |
SERVICE_INTERROGATE |
SERVICE_USER_DEFINED_CONTROL);
int SERVICE_AUTO_START = 0x00000002;
try
{
IntPtr sc_handle = OpenSCManager(null,null,SC_MANAGER_CREATE_SERVICE);
if (sc_handle.ToInt32() != 0)
{
IntPtr sv_handle = CreateService(sc_handle,svcName,svcDispName,SERVICE_ALL_ACCESS,SERVICE_WIN32_OWN_PROCESS, SERVICE_AUTO_START,SERVICE_ERROR_NORMAL,svcPath,null,0,null,null,null);
if(sv_handle.ToInt32() ==0)
{
CloseServiceHandle(sv_handle);
CloseServiceHandle(sc_handle);
return false;
}
else
{
int i = StartService(sv_handle,0,null);
if(i==0)
{
//Console.WriteLine("Couldnt start service");
return false;
}
//Console.WriteLine("Success");
CloseServiceHandle(sv_handle);
CloseServiceHandle(sc_handle);
return true;
}
}
else
return false;
}
catch(Exception e)
{
throw e;
}
}
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Заявление об ответственности / Список мошенников
Часовой пояс GMT +4, время: 15:29.
|
 |