繁体   English   中英

在安装期间使用 InstallUtil.exe 命令安装 windows 服务

[英]Install a windows service with InstallUtil.exe command during an installation

我在Visual Studio Solution中有一个Console Application项目。 这个应用程序,在这里称为 semplicity MyApplication.exe,只不过是 WCF 服务的主机。

我需要一个安装程序来在目标机器上安装我的应用程序,所以我下载了Microsoft Visual Studio Installer Projects扩展。 我收集了所有要复制到应用程序文件夹中的文件,但我希望安装程序甚至将我的服务注册为 Windows 服务。

为此,我导入了InstallUtil.exe ,如下图所示。 我创建了嵌套的额外文件夹(Windows 文件夹 -> Microsoft.NET -> Framework64 -> v4.030319)以反映目标环境的实际结构。

在此处输入图像描述

然后我在Commit节点下创建了这样的Custom Action

在此处输入图像描述

使用以下Arguments:

“[TARGETDIR]MyApplication.exe”

我尝试了生成的设置,我注意到所有文件都已复制但未安装服务(我在 MSC 列表中没有看到它)。

所以,在我的问题下面:

  • 我在哪里做错了什么?
  • 有没有我可以检查的日志?
  • 如果之前已经安装了该服务,我可以通过哪种方式卸载该服务?
  • 坦率地说,我期待更多可定制的东西。例如,与我的应用程序相关的附加复选框或用户可以在安装时管理的东西。 如果我的App.config包含 KeyValue [Server="localhost"] 是否可以在安装时自定义它,并向用户弹出一个弹出窗口:“您的服务器在哪里?”并使用提示的信息更新我的配置文件用户?

限制Visual Studio 安装程序项目有很多限制短版,Chris Painter )。

替代工具还有许多其他工具,其中一些是免费的


WiX 工具包:WiX 工具包是免费和开源的。 以下是两个无需运行自定义操作即可安装服务的示例(安装服务的能力内置于 MSI,无需使用InstallUtil.exe -对不必要的自定义操作活动“说不” ):


链接

也许这对处于类似情况的人有用。

使用语句

using System.Configuration.Install;

安装

ManagedInstallerClass.InstallHelper(new[] { Assembly.GetExecutingAssembly().Location });

卸载

ManagedInstallerClass.InstallHelper(new[] { "/u", Assembly.GetExecutingAssembly().Location });

上面处理了您提到的 InstallUtil 的功能。

文档

ManagedInstallerClass.InstallHelper

InstallUtil 文档

该实用程序位于以下位置:

Windows 系统上的 .NET 目录:

  • C:\Windows\Microsoft.NET\Framework\v\InstallUtil.exe
  • C:\Windows\Microsoft.NET\Framework64\v\InstallUtil.exe

InstallUtil.exe 由 Microsoft 进行数字签名。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM