使用InstallUtil工具无法安装Windows服务

14

我使用VS 2012,由于安装项目已从其中删除,因此我必须使用InstallUtil.exe。

我的Windows服务应用程序中没有projectInstaller类。我在命令提示符中运行:

installutil FilesMonitoringService.exe 

我得到:

在命令行中运行以下命令进行安装:C:\Program Files\Microsoft Visual Studio 8\VC#>installutil "C:\Program Files\Microsoft Visual Studio 8\VC#\CSharpProjects\MyService\MyService\bin\Release\MyService.exe"。安装过程将会记录在日志文件 C:\Program Files\Microsoft Visual Studio 8\VC#\CSharpProjects\MyService\MyService\bin\Release\MyService.InstallLog 中,其中展示了程序 MyService.exe 的进度。安装成功后,Commit 阶段开始,同样会有进度记录在上述日志文件中。最终,程序的安装完成,并移除 InstallState 文件。

好的,看起来一切都已经安装好了。但是!当我去任务管理器的服务页面时,我找不到我的服务。

可能的原因是什么?

提前感谢!

编辑: 我指出我没有projectInstaller类,因为如果我添加它(在设计师->添加安装程序)并运行installutil命令,我会得到:(近似翻译)

正在安装FilesMonitoringService... 在应用程序日志中创建EventLog FilesMonitoringService...

在这个设置阶段发生了异常。

System.Security.SecurityException:源未找到,但无法通过任何或所有日志记录找到。不可用日志:Security。

反冲阶段开始。

// 大量文本

反冲阶段已成功完成

执行设置组操作。 设置失败并执行回退。

因此,如果我将projectInstller添加到我的Windows服务中,则使用installUtil肯定无法安装。
以下是生成的代码:

[RunInstaller(true)]
public partial class ProjectInstaller : Installer
{
    public ProjectInstaller()
    {
        InitializeComponent();
    }
    private void serviceInstaller1_AfterInstall(object sender, InstallEventArgs e)
    {}
    private void serviceProcessInstaller1_AfterInstall(object sender, InstallEventArgs e)
    {}
}

我需要在afterInstall方法中添加一些代码吗?我还在“属性”窗口中设置了以下属性:serviceInstaller1: ServiceName -> FileMonitoringService, StartType -> AutomaticserviceProcessInstaller1: Account -> LocalSystem 或者可以不使用projectInstaller实现吗?

2017年评论 - 这个主题在类似的SO帖子中有几个有用的答案和评论。https://dev59.com/Mmsz5IYBdhLWcg3wZ29q - Sql Surfer
3个回答

19

好的,有几件事情:

1)你需要项目安装程序。
2)YourProject -> 属性;启动项目 -> YourProject.Program
3)构建
4)以管理员身份运行命令提示符!

现在一切都正常了。

完整教程链接


1
我认为你的意思是启动“对象”。 - Aizzat Suhardi
“以管理员身份运行”对我来说是个问题。谢谢 :) - fabriciorissetto
2017年注释 - 如果此答案未解决您所有的问题,则在以下SO帖子中提出其他细节。https://dev59.com/Mmsz5IYBdhLWcg3wZ29q - Sql Surfer

1
我现在没有VS2012的副本进行测试,但我相信你的问题与项目安装程序类有关。从msdn中得知:安装组件会在其被安装到的系统上注册一个个别服务,并让服务控制管理器知道该服务的存在。

0

虽然看起来微不足道,但在编写installutil命令参数时请仔细检查,因为您可能会将服务的exe文件与引用项目的另一个由编译生成的exe文件(该项目没有服务安装程序)混淆并导致失败。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接