[开发笔记]-Windows Service服务相关注意事项
注意一:报错:“本地计算机上的 *** 服务启动后停止。某些服务在未由其他服务或程序使用时将自动停止。”
该问题主要的原因是 Service服务程序中有错误。
遇到这个问题时,无论是重新安装服务,还是重启计算机,每次启动时都会弹出这个错误提示框。
解决这种问题最好的办法就是:使用 控制台应用程序 来调试,等调试通过后,在加入到Service服务程序中。

注意二: 报错 :试图加载格式不正确的程序
原因:程序集之间的通讯要么全是64位环境下的,要么全是32位环境下的。不能混编访问。不然会出现“试图加载格式不正确的程序”的错误。
特别是引用其他第三方类库或者C++编译的类库时,容易出现这个问题。
附:相关参考:
64位操作系统下IIS报“试图加载格式不正确的程序”错误 - 软件设计师到程序员 - 博客频道 - CSDN.NET
注意三:使用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程序的目录
转载请注明出处。
[开发笔记]-Windows Service服务相关注意事项的更多相关文章
- C# Windows Service服务的创建和调试
前言 关于Windows服务创建和调试的文章在网络上的很多文章里面都有,直接拿过来贴在这里也不过仅仅是个记录,不会让人加深印象.所以本着能够更深刻了解服务项目的创建和调试过程及方法的目的,有了这篇记录 ...
- quartz.net结合Topshelf实现windows service服务托管的作业调度框架
topshelf可以很简单方便的实现windows service服务,详见我的一篇博客的介绍 http://www.cnblogs.com/xiaopotian/articles/5428361.h ...
- 震惊!Windows Service服务和定时任务框架quartz之间原来是这种关系……
过场CG: 接到公司领导的文件指示,“小熊”需要在6月底去海外执行一个行动代号为[定时任务]的营救计划,这个计划关系到公司某个项目的生死(数据安全漏洞),作战部拟定两个作战方案: 方案一:使用务定 ...
- .Net Windows Service(服务) 调试安装及System.Timers.Timer 使用
Windows Service(服务) 是运行在后台的进程 1.VS建立 Windows 服务(.NET Framework) 2.添加Timer 双击Service1.cs可以拖控件(System ...
- Windows Service 服务搭配FluentScheduler实现定时任务调度
Windows Service 服务 创建Windows Service 项目 创建一个Windows Service项目,并将项目名称改为 TaskWindowService 在解决方案资源管理器内 ...
- [开发笔记]-控制Windows Service服务运行
用代码实现动态控制Service服务运行状态. 效果图: 代码: #region 启动服务 /// <summary> /// 启动服务 /// </summary> /// ...
- 使用C#编程语言开发Windows Service服务
转载-https://www.cnblogs.com/yubao/p/8443455.html Create Windows Service project using Visual Studio C ...
- [Openwrt 项目开发笔记]:Samba服务&vsFTP服务(四)
[Openwrt项目开发笔记]系列文章传送门:http://www.cnblogs.com/double-win/p/3888399.html 正文: 在上一节中,我们讲述了如何在路由器上挂载U盘,以 ...
- war包部署在tomcat下,使用windows service服务方式启动tomcat服务器,在包含调用dll的模块,报dll找不到问题的解决办法
问题描述: 开发了一个需要调用dll的java web程序,在idea开发环境下运行调试没问题,可以正常运行,在tomcat/bin下,运行批处理startup.bat,启动tomcat服务器,也可以 ...
随机推荐
- linux 命令集
cat chattr chgrp c hmod chown cksum cmp diff diffstat file find git gitview indent cut ln less ...
- ACM比赛经验
这篇博客是转别人的,觉得很好,希望能在以后的现场赛中用上:ACM比赛经验 推荐此篇文章打印,与模板放在一起. 1. 比赛中评测会有些慢,偶尔还会碰到隔10分钟以上才返回结果的情况,这段时间不能等结果, ...
- BigDecimal类型比较大小
这个类是java里精确计算的类 1 比较对象是否相等 一般的对象用equals,但是BigDecimal比较特殊,举个例子: BigDecimal a=BigDecimal.value ...
- 检测到在集成的托管管道模式下不适用的 ASP.NET 设置。
<!--解决让程序在集成模块通道下运行--> <system.webServer> <validation validateIntegratedModeConfigura ...
- 如何创建和使用XMLHttpRequest对象?
创建XMLHttpRequest对象,我有以下几种方法,顺带给大家介绍下他们的使用,一起来看看那吧. 1. 第一种,我们可以使用构造函数的方式.直接new的方式,这样我们就构造了这个对象. reque ...
- git tag之后如何修改
先 git clone 整个仓库,然后 git checkout tag_name 就可以取得 tag 对应的代码了. 但是这时候 git 可能会提示你当前处于一个“detached HEAD&quo ...
- 十问 Linux 虚拟内存管理 (glibc) (二)
版权声明:本文由陈福荣原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/184 来源:腾云阁 https://www.qclo ...
- MySQL学习笔记_2_MySQL创建数据表(上)
MySQL创建数据表(上) 一.创建数据表的SQL语句模型[弱类型] CREATETABLE [IF NOT EXISTS] 表名称( 字段名1列的类型[属性][索引], 字段名2 列的类型[属性][ ...
- Shell基础:Linux权限管理
Linux权限基本概念 查看系统(文件夹/文件)权限: ls -l =>d/- xxx xxx xxx. num owner group size date filename ...
- java 三大框架 介绍
三大框架:Struts+Hibernate+Spring Java三大框架主要用来做WEN应用. Struts主要负责表示层的显示 Spring利用它的IOC和AOP来处理控制业务(负责对数据库的操作 ...