[开发笔记]-Windows Service服务相关注意事项

简介:

注意一:报错:“本地计算机上的 *** 服务启动后停止。某些服务在未由其他服务或程序使用时将自动停止。”

  该问题主要的原因是 Service服务程序中有错误。

  遇到这个问题时,无论是重新安装服务,还是重启计算机,每次启动时都会弹出这个错误提示框。

  解决这种问题最好的办法就是:使用 控制台应用程序 来调试,等调试通过后,在加入到Service服务程序中。

 

注意二: 报错 :试图加载格式不正确的程序

原因:程序集之间的通讯要么全是64位环境下的,要么全是32位环境下的。不能混编访问。不然会出现“试图加载格式不正确的程序”的错误。

 特别是引用其他第三方类库或者C++编译的类库时,容易出现这个问题。

附:相关参考:

64位操作系统下IIS报“试图加载格式不正确的程序”错误 - 软件设计师到程序员 - 博客频道 - CSDN.NET

使用C#创建windows 服务 - 往事如锋 - 博客园

 

 注意三:使用ManagedInstallerClass.InstallHelper安装服务的蛋疼问题

这个路径绝对没错,服务映像exe也没问题,事实上通过命令行调用InstallUtil.exe工具进行手动安装都是能正常安装的,但使用InstallHelper()方法就老是会报这个错?

  解决方法:目标平台选为x86即可

 

错误提示: “ 未能加载文件或程序集或它的某一个依赖项。生成此程序集的运行时比当前加载的运行时新,无法加载此程序集。”

一定要保证服务和调用程序处于相同的.net版本和目标平台下

      

附:

【C#】使用ManagedInstallerClass.InstallHelper安装服务的蛋疼问题

 注意四:在Service服务中获取当前程序的运行目录

  之前在winform程序中获取exe程序当前的运行目录,我用的都是 System.Environment.CurrentDirectory 。但今天在测试一个服务程序时,运行时获取到的当前程序运行目录竟然是 “C:\Windows\SysWOW64”  ,下面是对各种获取程序当前目录的测试结果:

复制代码
       protected override void OnStart(string[] args)
        {
            //获取和设置当前目录(即该进程从中启动的目录)的完全限定路径。
            var str1 = System.Environment.CurrentDirectory;

            XueLog("Environment.CurrentDirectory  " + str1);

            //获取当前 Thread 的当前应用程序域的基目录,它由程序集冲突解决程序用来探测程序集。
            var str2 = System.AppDomain.CurrentDomain.BaseDirectory;

            XueLog("AppDomain.CurrentDomain.BaseDirectory   " + str2);

            //获取和设置包含该应用程序的目录的名称。
            var str3 = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase;

            XueLog("SetupInformation.ApplicationBase   " + str3);

        }
复制代码

程序运行结果:

可见,Environment.CurrentDirectory 在Service服务中获取的并不一定是当前exe程序的目录

 

 本文转自 酷小孩 博客园博客,原文链接:http://www.cnblogs.com/babycool/p/3738948.html  ,如需转载请自行联系原作者


相关文章
|
21天前
|
运维 监控 关系型数据库
运维实战:Windows服务挂掉了怎么办,通过Bat脚本实现自动重启
本文介绍了如何使用Bat脚本自动监控并重启Windows服务器上的挂掉服务,例如MySQL,以避免在假期等情况下需要紧急处理问题。首先,创建一个Bat脚本,设定每小时检查一次服务状态,如果服务停止则自动重启。脚本内容包括检查服务是否运行并根据状态执行相应操作。同时,脚本中包含了确保以管理员权限运行的代码。 脚本需设置为ANSI编码以防止乱码。推荐将Bat脚本封装为Windows服务以保证稳定运行,提供了使用NSSM工具、Windows服务程序和开源的Java工具winsw将批处理脚本转化为服务的方法。这些方法可以确保服务在后台可靠运行,即使在服务意外停止时也能自动恢复。
|
3天前
|
开发框架 前端开发 调度
C#基于Quartz.NET实现任务调度并部署Windows服务
C#基于Quartz.NET实现任务调度并部署Windows服务
|
7天前
|
网络安全 C++ Windows
【Windows驱动开发】(主机)VS2017+(虚拟机)win10系统------双机调试
【Windows驱动开发】(主机)VS2017+(虚拟机)win10系统------双机调试
|
7天前
|
Windows
【Windows驱动开发】注册表的基本操作(创建、打开、修改、读取、枚举)(附源码)
【Windows驱动开发】注册表的基本操作(创建、打开、修改、读取、枚举)(附源码)
|
8天前
|
编解码 Windows
FFmpeg开发笔记(二十九)Windows环境给FFmpeg集成libxvid
XviD是开源MPEG-4视频编码器,与DivX相似但后者非开源。早期MP4常使用XviD或DivX编码,现已被H.264取代。在Windows上集成FFmpeg的XviD编解码库libxvid,需访问<https://labs.xvid.com/source/>下载源码,解压后在MSYS环境中配置、编译和安装。之后重新配置FFmpeg,启用libxvid并编译安装。详细步骤包括configure命令、make和make install。成功后,通过`ffmpeg -version`检查是否启用libxvid。更多音视频开发技术可参考《FFmpeg开发实战:从零基础到短视频上线》。
43 0
FFmpeg开发笔记(二十九)Windows环境给FFmpeg集成libxvid
|
21天前
|
程序员 Windows
程序员必备技能:一键创建windows 服务
该内容是关于在Windows上创建服务的教程。通过一个BAT脚本示例,用户可以将程序设置为开机启动或持续运行的服务。脚本设置了服务名称、显示名和描述,并指定了程序路径和参数。将代码保存为.bat文件,以管理员权限运行,即可创建服务。之后在Windows服务管理中找到并启动该服务。
|
关系型数据库 Windows Oracle
windows 2008 使用注意事项
1.如果想在windows 2008上架设oracle db server,只能安装oracle 10g r2以上版本 2.管理员用户名最好不要用邮箱格式(比如xxx.xxx@abc.com),否则在计划任务里创建任务时,总是提示用户名无效。
752 0
|
1月前
|
Linux Windows
Windows Server 下文件同步
Windows Server 下文件同步
34 0
|
13天前
|
编解码 安全 网络安全
RealVNC的 VNC server在windows7系统下无法正确运行
在Windows 7上运行旧版VNC Server(如4.1.2)可能存在兼容性问题,但可通过调整配置解决。步骤包括:安装VNC Server,设置兼容性模式(选择Windows XP SP3),启动VNC Server,配置VNC连接参数。若遇到问题,检查防火墙设置,确保系统更新,并考虑升级到新版VNC Server以提高性能和兼容性。
|
27天前
|
开发框架 .NET API
在Windows Server 2008 R2上运行.Net 8应用
在Windows Server 2008 R2上成功运行.Net 8程序,需安装三个补丁:Windows Server 2008 R2 SP1 (KB976932)是基础更新;VC_redist.x64提供MSVC库支持;KB3063858解决.NET运行时加载`kernel.dll`的路径问题。KB3063858可能需要KB2533623。详细信息和下载链接在文中给出。