问题:windows服务安装时,出错:System.ComponentModel.Win32Exception: 帐户名无效或不存在,
解决:将serviceProcessInstaller1->Accout属性,设为:LocalSystem(默认是User)。
运行: Installuitl 程序名.exe ,安装成功。
卸载是 Installuitl /u 程序名.exe
问题:如何不使用InstallUtil 安装 启动 停止 卸载 Windows服务?
解决:用System.Configuration.Install.AssemblyInstaller类加载一个程序集,并运行其中的安装程序。
[C#]
//安装服务
public static void InstallService(string filepath, string serviceName, string[] options)
{
try
{
if (!IsServiceExisted(serviceName))
{
IDictionary mySavedState = new Hashtable();
AssemblyInstaller myAssemblyInstaller = new AssemblyInstaller();
myAssemblyInstaller.UseNewContext = true;
myAssemblyInstaller.Path = filepath;
myAssemblyInstaller.CommandLine = options;
myAssemblyInstaller.Install(mySavedState);
myAssemblyInstaller.Commit(mySavedState);
myAssemblyInstaller.Dispose();
}
}
catch (Exception ex)
{
throw new Exception("Install Service Error\n" + ex.Message);
}
}
//卸载服务
public static void UnInstallService(string filepath, string serviceName, string[] options)
{
try
{
if (IsServiceExisted(serviceName))
{
AssemblyInstaller myAssemblyInstaller = new AssemblyInstaller();
myAssemblyInstaller.UseNewContext = true;
myAssemblyInstaller.Path = filepath;
myAssemblyInstaller.CommandLine = options;
myAssemblyInstaller.Uninstall(null);
myAssemblyInstaller.Dispose();
}
}
catch (Exception ex)
{
throw new Exception("UnInstall Service Error\n" + ex.Message);
}
}
//判断服务是否存在
public static bool IsServiceExisted(string serviceName)
{
ServiceController[] services = ServiceController.GetServices();
foreach (ServiceController s in services)
{
if (s.ServiceName == serviceName)
{
return true;
}
}
return false;
}
//启动服务
public static void StartService(string serviceName)
{
if (IsServiceExisted(serviceName))
{
System.ServiceProcess.ServiceController service = new System.ServiceProcess.ServiceController(serviceName);
if (service.Status != System.ServiceProcess.ServiceControllerStatus.Running &&
service.Status != System.ServiceProcess.ServiceControllerStatus.StartPending)
{
service.Start();
service.WaitForStatus(ServiceControllerStatus.Running, TimeSpan.FromSeconds(60));
}
}
}
//停止服务
public static void StopService(string serviceName)
{
if (IsServiceExisted(serviceName))
{
System.ServiceProcess.ServiceController service = new System.ServiceProcess.ServiceController(serviceName);
if (service.Status == System.ServiceProcess.ServiceControllerStatus.Running)
{
service.Stop();
service.WaitForStatus(ServiceControllerStatus.Stopped, TimeSpan.FromSeconds(60));
}
}
}
问题:"基础连接已经关闭: 未能为SSL/TLS 安全通道建立信任关系。"
public bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors) { // 总是接受 return true; }
在发送请求前面加上如下一行代码:
ServicePointManager.ServerCertificateValidationCallback = CheckValidationResult;
问题:如何制作批处理文件实现服务的安装和卸载
安装
%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe %~dp0\yourService.exe Net Start yourService
sc config yourService start= auto
pause
tip:
1:%~dp0 表示批处理文件当前目录
2:installutil.exe这个文件也可以复制到当前服务目录,写法就可以用 %~dp0\installutil.exe %~dp0\yourService.exe 了
3:设置服务为自动运行
卸载
%~dp0\InstallUtil.exe %~dp0\yourService.exe -u
pause