.net自带的打包部署能完成这样的功能吗?
C#写的多个windows服务程序。我想做在一个安装程序里,当我点击安装的时候,
它会把我的打包的所有的windows服务程序都显示出来,然后我任意选择我要安装的服务程序。比如我都选了,那么它全部都给我安装,或者我只选了一个服务程序,那么它就只安装那一个服务程序。
.net里能这样做吗,假如不能,我该用什么来作。?

解决方案 »

  1.   

    Visual Studio.NET 随附有安装组件,可用来安装与服务应用程序相关联的资源。安装组件在正在安装到的系统上注册一项单个的服务,并使服务控制管理器知道该服务的存在。要正确安装服务,并不需要在安装程序中进行任何特殊编码。但是,如果需要向安装进程添加特殊功能,则可能偶尔需要修改安装程序的内容。       将安装程序添加到服务应用程序的步骤是:1:在解决方案中,访问要向其中添加安装组件的服务的Design视图。2:在属性窗口中,单击添加安装程序链接这时项目中就添加了一个新类 ProjectInstaller 和两个安装组件 ServiceProcessInstaller 和 ServiceInstaller,并且服务的属性值被复制到组件。 3:若要确定如何启动服务,请单击 ServiceInstaller 组件并将 StartType 属性设置为适当的值。ü         Manual      服务安装后,必须手动启动。ü         Automatic    每次计算机重新启动时,服务都会自动启动。ü         Disabled     服务无法启动。4:将serviceProcessInstaller类的Account属性改为 LocalSystem     这样,不论是以哪个用户登录的系统,服务总会启动。 第四步:生成服务程序通过从生成菜单中选择生成来生成项目。注意   不要通过按 F5 键来运行项目——不能以这种方式运行服务项目。第五步:安装服务访问项目中的已编译可执行文件所在的目录。 
    用项目的输出作为参数,从命令行运行 InstallUtil.exe。在命令行中输入下列代码: 
    installutil yourproject.exe
    卸载服务 用项目的输出作为参数,从命令行运行 InstallUtil.exe。 installutil /u yourproject.exe
      

  2.   

    首先,在MSDN中就可以搜索到,搜索部署即可
    下面是我搜索出来的,用过,很完整注意   Windows 服务模板和相关功能在 Visual Basic 和 Visual C# .NET 的标准版中不可用。有关更多信息,请参见 Visual Basic 标准版功能或 Visual C# 标准版的功能。
    本主题中的步骤引导您完成创建简单的向事件日志写入消息的 Windows 服务应用程序的过程。创建和使用服务所执行的基本步骤包括: 使用 Windows 服务应用程序模板创建项目。该模板为您创建一个从 ServiceBase 继承的类,并编写大量基本服务代码,例如启动服务的代码。 
    编写 OnStart 和 OnStop 过程的代码,并重写要重新定义的任何其他方法。 
    添加服务应用程序所必需的安装程序。默认情况下,当单击“添加安装程序”链接时,一个包含两个或多个安装程序的类将被添加到应用程序中:一个用于安装进程,其他安装程序中的每个用于项目包含的每个关联的服务。 
    生成您的项目。 
    创建安装项目以安装服务,然后进行安装。 
    访问 Windows 2000 服务控制管理器并启动您的服务。 
    首先,创建项目并设置服务正常运行所必需的值。创建并配置服务 在“文件”菜单上指向“新建”,然后单击“项目”。 
    “新建项目”对话框打开。 在 Visual Basic 或 Visual C# 项目模板的列表中选择“Windows 服务”项目,并将其命名为 MyNewService。 
    注意   项目模板自动添加一个继承自 System.ServiceProcess.ServiceBase 的名为 Service1 的组件类。
    单击设计器以选择 Service1。然后,在“属性”窗口中,将 Service1 的 ServiceName 属性设置为 MyNewService。 
    将 AutoLog 属性设置为 true。 
    在“视图”菜单中,选择“代码”以打开代码编辑器。编辑 Main 方法以创建 MyNewService 的实例。当在步骤 3 中重命名服务时,未在 Main 方法中修改类名。若要访问 Visual Basic 中的 Main 方法,请展开“组件设计器生成的代码”区域。 
    ' Visual Basic
    Shared Sub Main()
       Dim ServicesToRun() As System.ServiceProcess.ServiceBase
       ' Change the following line to match.
       ServicesToRun = New System.ServiceProcess.ServiceBase() _
          {New MyNewService()}
       System.ServiceProcess.ServiceBase.Run(ServicesToRun)
    End Sub// C#
    static void Main()
    {
       System.ServiceProcess.ServiceBase[] ServicesToRun;
       // Change the following line to match.
       ServicesToRun = new System.ServiceProcess.ServiceBase[] 
          { new MyNewService() };
       System.ServiceProcess.ServiceBase.Run(ServicesToRun);
    }
    在下一节中,您将把自定义事件日志添加到 Windows 服务中。事件日志与 Windows 服务没有任何形式的关联。此处,EventLog 组件用作可以添加到 Windows 服务的组件类型的示例。有关自定义事件日志的更多信息,请参见创建和移除自定义事件日志。将自定义事件日志功能添加到服务中 在解决方案资源管理器中,右击 Service1.vb 或 Service1.cs,并选择“视图设计器”。 
    在工具箱的“组件”选项卡中,将 EventLog 组件拖到设计器。 
    在解决方案资源管理器中,右击 Service1.vb 或 Service1.cs,并选择“查看代码”。 
    编辑构造函数以定义一个用户事件日志。若要访问 Visual Basic 中的构造函数,请展开“组件设计器生成的代码”区域。 
    ' Visual Basic
    Public Sub New()
       MyBase.New
       InitializeComponent()
       If Not EventLog.SourceExists("MySource") Then
          EventLog.CreateEventSource("MySource", "MyNewLog")
       End If
       EventLog1.Source = "MySource"
       EventLog1.Log = "MyNewLog"
    End Sub// C#
    public MyNewService()
    {
       InitializeComponent();
       if (!System.Diagnostics.EventLog.SourceExists("MySource")) 
       {         
          System.Diagnostics.EventLog.CreateEventSource(
             "MySource","MyNewLog");
       }
       eventLog1.Source = "MySource";
       eventLog1.Log = "MyNewLog";
    }
    定义当服务启动时发生的情况 在代码编辑器中,找到创建项目时被自动重写的 OnStart 方法,并编写代码来确定当服务开始运行时发生的情况: 
    ' Visual Basic
    Protected Overrides Sub OnStart(ByVal args() As String)
       EventLog1.WriteEntry("In OnStart")
    End Sub// C#
    protected override void OnStart(string[] args)
    {
       eventLog1.WriteEntry("In OnStart");
    }
    注意   服务应用程序设计为长时间运行。因此,它通常轮询或监视系统中的情况。监视是在 OnStart 方法中设置的。但是,OnStart 实际上不进行监视。一旦服务的操作开始,OnStart 方法必须返回到操作系统。它不能始终循环或阻塞。若要设置简单的轮询机制,可以使用 System.Timers.Timer 组件。在 OnStart 方法中,设置组件上的参数,然后将 Timer.Enabled 属性设置为 true。然后,计时器将在代码中周期性地引发事件,此时,服务可以进行其监视工作。
    定义当服务停止时发生的情况 在代码编辑器中,找到创建项目时被自动重写的 OnStop 过程,并编写代码来确定当服务停止时发生的情况: 
    ' Visual Basic
    Protected Overrides Sub OnStop()
       EventLog1.WriteEntry("In OnStop.")
    End Sub// C#
    protected override void OnStop()
    {
       eventLog1.WriteEntry("In onStop."); 
    }
    还可以重写 OnPause、OnContinue 和 OnShutdown 方法来定义对组件的进一步处理。定义服务的其他操作 对于要处理的方法,重写适当的方法并定义要发生的操作。 
    下面的代码显示重写 OnContinue 方法时代码的情况: ' Visual Basic
    Protected Overrides Sub OnContinue()
       EventLog1.WriteEntry("In OnContinue.")
    End Sub// C#
    protected override void OnContinue()
    {
       eventLog1.WriteEntry("In OnContinue.");
    }  
    某些自定义操作需要在安装 Windows 服务时发生,这可以由 Installer 类来完成。Visual Studio 可以专门为 Windows 服务创建这些安装程序并将它们添加到项目中。为服务创建安装程序 
      

  3.   


    返回到 Service1 的“设计”视图。 
    单击设计器的背景以选择服务本身,而不是它的任何内容。 
    在“属性”窗口中,单击属性列表下面灰色区域中的“添加安装程序”链接。 
    默认情况下,向您的项目添加包含两个安装程序的组件类。将该组件命名为 ProjectInstaller,它包含的安装程序分别是服务的安装程序和服务关联进程的安装程序。 访问 ProjectInstaller 的“设计”视图,然后单击“ServiceInstaller1”。 
    在“属性”窗口中,将 ServiceName 属性设置为 MyNewService。 
    将 StartType 属性设置为 Automatic。 
    在设计器中,选择 ServiceProcessInstaller1(针对 Visual Basic 项目),或 serviceProcessInstaller1(针对 Visual C# 项目)。将 Account 属性设置为 LocalService。这将使得在本地服务帐户上安装和运行该服务。有关更多信息,请参见 ServiceProcessInstaller.Account 属性。 
    安全说明   LocalService 帐户用作本地计算机上的非特权用户,向任何远程服务器显示匿名凭据。使用其他帐户时需要特别小心,因此它们具有较高的特权,会增加您受到恶意代码攻击的风险。
    生成服务项目 在解决方案资源管理器中,右击您的项目并从快捷菜单中选择“属性”。出现项目的“属性页”对话框。 
    在左边的窗格中,选择“通用属性”文件夹中的“常规”选项卡。 
    从“启动对象”列表中,选择 MyNewService(针对 Visual Basic 项目),或 MyNewService.MyNewService(针对 Visual C# 项目)。单击“确定”。 
    按 CTRL+SHIFT+B 生成项目。 
    生成项目后,便可以对其进行部署了。安装项目将安装已编译的项目文件并运行要运行 Windows 服务所需的安装程序。若要创建完整的安装项目,您需要将项目输出 MyNewService.exe 添加到安装项目,然后添加自定义操作来安装 MyNewService.exe。有关安装项目的更多信息,请参见 安装项目。有关自定义操作的更多信息,请参见 演练:创建自定义操作。为服务创建安装项目 在“文件”菜单上指向“添加项目”,然后选择“新建项目”。 
    在“项目类型”窗格中选择“安装和部署项目”文件夹。 
    在“模板”窗格中选择“安装项目”。将项目命名为 MyServiceSetup。 
    安装项目随即添加到解决方案。 然后,将 Windows 服务项目的输出 MyNewService.exe 添加到安装项目中。向安装项目添加 MyNewService.exe 在解决方案资源管理器中,右击“MyServiceSetup”,指向“添加”,然后选择“项目输出”。 
    出现“添加项目输出组”对话框。 在“项目”框中选择“MyNewService”。 
    在列表框中,选择“主输出”,然后单击“确定”。 
    MyNewService 的主输出的项目项被添加到安装项目中。现在添加自定义操作以安装 MyNewService.exe 文件。 向安装项目添加自定义操作 在解决方案资源管理器中右击安装项目,指向“视图”,然后选择“自定义操作”。 
    出现自定义操作编辑器。 在“自定义操作”编辑器中右击“自定义操作”节点,然后选择“添加自定义操作”。 
    出现“选择项目中的项”对话框。 在列表框中双击“应用程序文件夹”将其打开,选择“主输出来自 MyNewService(活动)”,然后单击“确定”。 
    主输出被添加到自定义操作的所有四个节点,即“安装”、“提交”、“回滚”和“卸载”。 在解决方案资源管理器中,右击 MyServiceSetup 项目并选择“生成”。 
    安装 Windows 服务 若要安装 MyEventLog.exe,请右击解决方案资源管理器中的安装项目,并选择“安装”。 
    启动和停止服务 通过执行下列操作之一打开服务控制管理器: 
    在 Windows 2000 Professional 中,在桌面上右击“我的电脑”,然后单击“管理”。在“计算机管理”控制台中,展开“服务和应用程序”节点。 
    - 或 - 在 Windows 2000 Server 中,单击“开始”,指向“程序”,单击“管理工具”,然后单击“服务”。 
    注意   在 Windows NT 4.0 版中,可以从控制面板中打开该对话框。
    现在应该看到 MyNewService 列在窗口的“服务”区域中。 从列表中选择您的服务,右击该服务,然后单击“启动”。 
    右击该服务,然后单击“停止”。 
    验证服务的事件日志输出 打开服务器资源管理器并访问“事件日志”节点。有关更多信息,请参见 在服务器资源管理器中处理事件日志。 
    注意   服务器资源管理器的“服务器”节点在 Visual Basic 和 Visual C# .NET 的标准版中不可用。有关更多信息,请参见 Visual Basic 标准版功能或 Visual C# 标准版的功能。
    找到 MyNewLog 的列表并展开它。您应该看到服务所执行操作的项。 
    卸载服务 在“开始”菜单上,打开“控制面板”并单击“添加或删除程序”,然后找到您的服务并单击“删除”。 
    还可以通过右击 .msi 文件的程序图标并选择“卸载”来卸载该程序。 
    注意   如果是在 Windows 2000 上安装了服务,则必须重新启动系统后才能重新安装服务。在 Windows 2000 中,服务在系统重新启动之前不会完全删除。