是否可以在不通过Installshield的情况下部署Windows服务?我有一个非常基本的服务,只是探测数据库,并希望将其部署在服务器上。
我尝试使用Installsheild LE,但在安装时遇到错误1001,这很难排除故障,无论如何Installshield在这种情况下感觉有点过分......有没有办法可以直接通过命令行或其他方法安装服务?
答案 0 :(得分:3)
是
但是,从最好到最差都有选择:
还有其他用于编写安装程序的工具。例如。完整版本的安装Shield或WiX(MS创建,用于Visual Studio安装程序)。
您可以使用installUtil
在程序集中包含从ServiceInstaller
派生的类型。 (参见 How to: Install and Uninstall Service 。)
您可以手动编辑注册表。
#3非常容易搞砸,并且不会帮助你应该包括的事件记录和性能计数器。 1 #2是最好的开发,并将设置还要记录事件日志和性能计数器(记住,您需要提升安装内容,并在作为服务运行时将调试器附加到服务中)。
使用真正的安装程序(#1)最适合测试(分段)和生产环境。
1 当你被问到为什么它不起作用时,你会希望能够弄清楚(或不是)正在进行的事情。
答案 1 :(得分:1)
是的,如果您的服务有Installer类,则可以使用installutil.exe
从命令行安装它using System.ComponentModel;
using System.Configuration.Install;
using System.ServiceProcess;
[RunInstaller(true)]
public class ServiceInstaller : Installer
{
public ServiceInstaller()
{
ServiceProcessInstaller serviceProcessInstaller = new ServiceProcessInstaller();
ServiceInstaller serviceInstaller = new ServiceInstaller();
//# Service Account Information
serviceProcessInstaller.Account = ServiceAccount.User;
serviceProcessInstaller.Username = "";
serviceProcessInstaller.Password = "";
//# Service Information
serviceInstaller.DisplayName = "Service name"
serviceInstaller.Description = "Service description"
serviceInstaller.StartType = ServiceStartMode.Automatic;
//# This must be identical to the WindowsService.ServiceBase name
//# set in the constructor of WindowsService.cs
serviceInstaller.ServiceName = "Service Name";
this.Installers.Add(serviceProcessInstaller);
this.Installers.Add(serviceInstaller);
}
}
答案 2 :(得分:0)
Building and Deploying a Windows Service using IsWiX
以上是我制作的简短视频,展示了如何使用WiX / IsWiX生成非常干净的MSI来安装服务。它真的很容易,快速,优雅和自由。
答案 3 :(得分:0)
您可以使用命令行工具 sc.exe 来创建和配置Windows服务(基本上将配置插入到注册表中),假设您已经将内置的.exe部署到磁盘上的某个位置服务器。