[开发笔记]-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  ,如需转载请自行联系原作者


相关文章
|
1月前
|
监控 搜索推荐 开发工具
2025年1月9日更新Windows操作系统个人使用-禁用掉一下一些不必要的服务-关闭占用资源的进程-禁用服务提升系统运行速度-让电脑不再卡顿-优雅草央千澈-长期更新
2025年1月9日更新Windows操作系统个人使用-禁用掉一下一些不必要的服务-关闭占用资源的进程-禁用服务提升系统运行速度-让电脑不再卡顿-优雅草央千澈-长期更新
137 2
2025年1月9日更新Windows操作系统个人使用-禁用掉一下一些不必要的服务-关闭占用资源的进程-禁用服务提升系统运行速度-让电脑不再卡顿-优雅草央千澈-长期更新
|
3月前
|
安全 Windows
【Azure Cloud Service】在Windows系统中抓取网络包 ( 不需要另外安全抓包工具)
通常,在生产环境中,为了保证系统环境的安全和纯粹,是不建议安装其它软件或排查工具(如果可以安装,也是需要走审批流程)。 本文将介绍一种,不用安装Wireshark / tcpdump 等工具,使用Windows系统自带的 netsh trace 命令来获取网络包的步骤
104 32
|
3月前
|
网络安全 Windows
Windows server 2012R2系统安装远程桌面服务后无法多用户同时登录是什么原因?
【11月更文挑战第15天】本文介绍了在Windows Server 2012 R2中遇到的多用户无法同时登录远程桌面的问题及其解决方法,包括许可模式限制、组策略配置问题、远程桌面服务配置错误以及网络和防火墙问题四个方面的原因分析及对应的解决方案。
226 4
|
3月前
|
C# Windows
【Azure App Service】在App Service for Windows上验证能占用的内存最大值
根据以上测验,当使用App Service内存没有达到预期的值,且应用异常日志出现OutOfMemory时,就需要检查Platform的设置是否位64bit。
63 11
|
4月前
|
监控 关系型数据库 MySQL
PowerShell 脚本编写 :自动化Windows 开发工作流程
PowerShell 脚本编写 :自动化Windows 开发工作流程
168 0
|
4月前
|
弹性计算 关系型数据库 网络安全
阿里云国际版无法连接和访问Windows服务器中的FTP服务
阿里云国际版无法连接和访问Windows服务器中的FTP服务
|
4月前
|
边缘计算 安全 网络安全
|
4月前
|
开发框架 .NET API
Windows Forms应用程序中集成一个ASP.NET API服务
Windows Forms应用程序中集成一个ASP.NET API服务
124 9
|
关系型数据库 Windows Oracle
windows 2008 使用注意事项
1.如果想在windows 2008上架设oracle db server,只能安装oracle 10g r2以上版本 2.管理员用户名最好不要用邮箱格式(比如xxx.xxx@abc.com),否则在计划任务里创建任务时,总是提示用户名无效。
803 0
|
4天前
|
安全 网络安全 数据安全/隐私保护
Windows Server 2025 Active Directory 重置用户密码
密码重置是管理员日常任务之一,用户因忘记或多次输错密码导致账户锁定时需进行重置。本文介绍在Active Directory服务器上重置密码的三种方法。